В таблице PERMISSONS хранится перечень разрешений:
•ID – идентификатор разрешения, по которому производится проверка в контрольной точке программного кода;
•NAME – название разрешения.
В таблице ROLE_PERMISSONS хранится перечень разрешений привязанных к ролям:
•PERMISSON_ID (FK) – разрешение, привязываемое к роли;
•ROLE_ID (FK) – роль, к которой привязывается разрешение;
•REVOKED – отмена привязки разрешения к роли. Используется для отмены наследуемой ролью-родителем от потомка привязки разрешения.
Роль-родитель обладает всеми правами, предоставляемыми ее ролями-потомками. Это же относится и к разрешениям. Но бывают ситуации, когда роль потомок имеет разрешение, а для роли-родителя оно не нужно. Например, роль кладовщика имеет привязанное разрешение на осуществление отгрузки товара со склада. Одновременно она является потомком роли начальника склада. Но начальник склада не является материально-ответственным лицом и не имеет права осуществлять такую отгрузку. Лишить роль-родитель начальника склада такого разрешения можно двумя способами:
•отобрать разрешение у роли-потомка кладовщика, но тогда ее пользователи будут лишены соответствующих прав;
•привязать разрешение также и к роли-родителю, но установить этой связи свойство REVOKED в значение true, тогда роль-потомок будет иметь это разрешение, а роль-родитель нет.
Также как роль-родитель обладает разрешениями своих ролей-потомков, так она обладает и отменами их разрешений. Например, привязывая разрешение к роли Младшего подчиненного, мы тем самым выдаем его и ролям-родителям – Старшему подчиненному и Начальнику отдела: Отменив это разрешение для роли Старшего подчиненного, мы тем самым отменим его и для Начальника отдела. |
Для удобства работы содержимое таблицы ROLE_PERMISSIONS автоматически реплицируется в таблицу ROLE_PERMISSONS_EXT, где для каждой роли хранится список всех ее разрешений указанный в явном виде с учетом того, что роль-родитель обладает разрешениями ролей-потомков, если они для нее не отменены свойством REVOKED:
•PERMISSION_ID (FK) – ссылка на разрешение;
•ROLE_ID (FK) – ссылка на роль.
Привязав разрешение к роли Младшего подчиненного, мы тем самым добавляем одну запись в таблицу ROLE_PERMISSIONS и три записи в таблицу ROLE_PERMISSIONS_EXT: Отменив это разрешение для роли Старшего подчиненного, мы тем самым отменим его и для Начальника отдела, добавив еще одну запись в таблицу ROLE_PERMISSIONS и удалив две записи в таблице ROLE_PERMISSIONS_EXT: |