система контроля доступа на редактирование к записям и полям
От: MadHuman Россия  
Дата: 11.05.22 16:34
Оценка:
Коллеги приветствую!

Размышляю по разным момента организации системы контроля доступа в приложении, к записям и их полям.
Потребности в целом типичны — нужно настраивать что именно (какие данные таблиц) пользователи могут редактировать.

Изложу свое видение подходов к принципам построения системы контроля доступа.
Доступы предоставляются/запрещаются за счет правил.

1. доступ на редактирование данных.
правило для конкретной таблицы, разрешает/запрещает редактировать записи (возможно с условием) и в нём можно задать список полей.
исходя из этого следует два варианта его интерпретации и реализации.

А. если список полей не задан, значит правило действует на все поля записи. звучит просто и логично.
покрывает потребности тоже хорошо. можно гибко настроить, либо все поля разрешить, либо только заданные, либо запретить конкретные (если были разрешены другим правилом).
и можно гибко комбинировать правила.

но тогда возникает вопрос — а что такое право редактирования записи? нужно ли оно отдельное?
исходя из этой интерпретации, получается что доступ достаточно проверять только к полю перед его редактированием.
право редактирования записи — можно вывести как — если есть право редактировать хотя бы одно поле, то значит есть право редактировать запись.
но в таком виде понятие "право редактировать запись" выглядит как не нужным в виде отдельного понятия..

Б. тут главная мысль — иерархичность. и сначала проверяется доступ у объекта-контейнера, затем у вложенного.
или принцип — контроль при входе в здание, и контроль при входе в комнату.
поле — это подобъект записи.
тогда логично проверять сначала право на редактирование записи. и если оно есть право на поле.
но по сравнению с вариантом А — всё как-то сложнее...
и интерпретация правил.. и логика контроля — надо две проверки для записи и для поля..

кто сталкивался с организацией подобного контроля, поделитесь пожалуйста опытом — как решали? какое мнение по вариантам А, Б?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.