Размышляю по разным момента организации системы контроля доступа в приложении, к записям и их полям.
Потребности в целом типичны — нужно настраивать что именно (какие данные таблиц) пользователи могут редактировать.
Изложу свое видение подходов к принципам построения системы контроля доступа.
Доступы предоставляются/запрещаются за счет правил.
1. доступ на редактирование данных.
правило для конкретной таблицы, разрешает/запрещает редактировать записи (возможно с условием) и в нём можно задать список полей.
исходя из этого следует два варианта его интерпретации и реализации.
А. если список полей не задан, значит правило действует на все поля записи. звучит просто и логично.
покрывает потребности тоже хорошо. можно гибко настроить, либо все поля разрешить, либо только заданные, либо запретить конкретные (если были разрешены другим правилом).
и можно гибко комбинировать правила.
но тогда возникает вопрос — а что такое право редактирования записи? нужно ли оно отдельное?
исходя из этой интерпретации, получается что доступ достаточно проверять только к полю перед его редактированием.
право редактирования записи — можно вывести как — если есть право редактировать хотя бы одно поле, то значит есть право редактировать запись.
но в таком виде понятие "право редактировать запись" выглядит как не нужным в виде отдельного понятия..
Б. тут главная мысль — иерархичность. и сначала проверяется доступ у объекта-контейнера, затем у вложенного.
или принцип — контроль при входе в здание, и контроль при входе в комнату.
поле — это подобъект записи.
тогда логично проверять сначала право на редактирование записи. и если оно есть право на поле.
но по сравнению с вариантом А — всё как-то сложнее...
и интерпретация правил.. и логика контроля — надо две проверки для записи и для поля..
кто сталкивался с организацией подобного контроля, поделитесь пожалуйста опытом — как решали? какое мнение по вариантам А, Б?
Re: система контроля доступа на редактирование к записям и полям
Здравствуйте, MadHuman, Вы писали: MH>кто сталкивался с организацией подобного контроля, поделитесь пожалуйста опытом — как решали? какое мнение по вариантам А, Б?
Тут самое главное — понять, чего именно хочется добиться. Какую прикладную задачу вы решаете.
А дальше — смотрите, какая модель безопасности решает эту прикладную задачу более эффективно.
Популярные решения — это RBAC и ACL.
Cейчас в мире более популярны RBAC-решения, т.к. ACL требуют слишком много приседаний при эксплуатации, и есть риск совершить труднообнаружимую ошибку при администрировании.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.