Распределение прав доступа и протоколирование изменений
Работа с данными через классы доступа к данным даёт не только возможность писать универсальный, не зависящий от используемой СУБД код, но также и решить задачу централизованного распределения прав доступа к данным таблиц и протоколирования изменений.
Вызов ряда методов требует наличия соответствующих прав у пользователя на таблицы, прописанных в системных таблицах celesta.userroles
и celesta.permissions
, в противном случае возникает исключение PermissionDeniedException
с сообщением вида "There is no … permission for user … on object …".
Если протоколирование изменения таблицы настроено в таблице celesta.logsetup
, то вызов некоторых методов будет приводить к созданиям записей в таблице celesta.log
.
Метод | Требуемые права | Протоколирование изменений |
---|---|---|
|
на чтение (r) |
не протоколируются |
|
на вставку (i) |
протоколируется, если включён флаг i.
|
|
на модификацию (m) |
протоколируется, если включён флаг m.
|
|
на удаление (d) |
|
deleteAll() не протоколируется и триггеры не выполняются.
|
Прочие методы не требуют никаких прав доступа к таблице и вызов их не протоколируется.
Т. е. определить курсор, выставить на нём фильтры и даже подсчитать количество подпадающих под фильтры записей при помощи метода count()
можно, даже не имея никаких прав на чтение таблицы.
Механизмом распределения прав и протоколирования можно как пользоваться, так и не пользоваться. При этом, если ими не пользоваться, их потенциальное наличие создаёт минимальный overhead по производительности.