Роли организованы в справочнике Roles в древовидной структуре, где у каждой роли может быть несколько родителей и потомков:
Окно справочника разделено на две части: слева отображается дерево ролей, справа – дочерние роли первого уровня выбранной слева роли.
В дереве слева роли всегда отсортированы по алфавиту, а папки всегда идут перед обычными ролями.
Записи справочника можно искать по Названию роли (Role name). Поиск осуществляется по вхождению искомого текста в название роли при нажатии на кнопку элемента управления или клавишу
. При удачном поиске курсор устанавливается на первую удовлетворяющую условиям найденную запись, при неудачном – остается на прежней. Повторное нажатие на кнопку поиска
приведет к нахождению следующей удовлетворяющей условию поиска записи и установке курсора на нее.
Роль также может быть папкой. Такие роли обозначаются в справочнике иконкой перед названием. Роли-папки не наделены никакими правами. Они предназначены исключительно для удобства организации структуры ролей и используются, например, для их группировки. Функциональность ролей-папок ограничена рядом запретов:
•с помощью роли-папки нельзя выдать доступ к какому-либо объекту прав;
•роль-папку нельзя назначить пользователю;
•роль-папку нельзя сделать потомком для другой роли, если она также не является папкой.
Функционал справочника ролей позволяет выполнять следующие действия:
• создавать новые роли. Новая роль будет создана на самом верхнем уровне независимо от того, какая роль выбрана слева в дереве;
• удалять выбранные роли, не являющиеся папками;
• создавать роли-папки с именем, введенным в поле Folder role name, не открывая форму создания новой роли. Новая роль-папка будет создана на самом верхнем уровне независимо от того, какая роль-папка выбрана слева в дереве;
• удалять выбранные роли-папки.
Каждая роль может обладать неограниченным числом потомков, а также может быть потомком для неограниченного числа родителей. |
Определить для роли роль-родитель нельзя, только наоборот. Именно поэтому при создании новой роли она всегда оказывается на верхнем уровне дерева. Если создаваемая новая роль (назовем ее "А") должна быть потомком для какой-либо другой роли (например, "В"), следует сохранить роль "А", а затем открыть в редакторе роль "В" и привязать к ней в качестве потомка "А". |
Древовидная организация справочника Ролей несет также важную функциональную нагрузку: роль-родитель наследует все права, которыми обладают ее роли-потомки в не зависимости от их уровня вложенности. Например, роли, определяющие функционал подчиненных, будучи потомками роли начальника отдела дают ему возможность совершать все доступные им операции. |
Таким образом, объекты прав могут быть либо в явном виде разрешены (allow) для роли, либо унаследованы ей от роли-потомка (derived).
Унаследованные от потомков права могут быть также разрешены для роли-родителя в явном виде, чтобы в случае исключения их из роли-потомка роль-родитель не лишилась требуемого права.
Может, однако, возникнуть такая ситуация, когда роль-потомок обладает некими правами, а роль-родитель этими правами обладать не должна. Например, роль кладовщика имеет право на осуществление отгрузки товара со склада. Одновременно она является потомком роли начальника склада. Но начальник склада не является материально-ответственным лицом и не имеет права осуществлять такую отгрузку. Лишить роль-родитель начальника склада этого функционала можно отменив (revoke) соответствующее унаследованное им от роли-потомка разрешение.
Такое отмененное разрешение не будет унаследовано ролью-родителем. Например, выдавая права роли Младшего подчиненного, мы тем самым выдаем их и ролям-родителям – Старшему подчиненному и Начальнику отдела. |
Отменив эти права для роли Старшего подчиненного, мы тем самым отменим их и для Начальника отдела (если только эти права не получены Начальником отдела также и из других дочерних ролей).
Если у роли роли-родителя есть две роли-потомка одного уровня, у одной из которых некое право выдано (allow), а у другой то же самое наоборот отменено (revoke), данное право ролью-родителем будет унаследовано. То есть разрешение доступа (allow) при наследовании приоритетнее запрета (revoke). |
Резюмируя вышесказанное, доступ к объекту прав в форме редактирования роли устанавливается с помощью флагов:
•Derived – доступ унаследован от роли-потомка. Снять этот флаг нельзя;
•Allow – разрешен. Этот флаг можно проставить в том числе и при уже установленном флаге Derived. Является взаимоисключающим с флагом Revoke;
•Revoke – отменен. Установка данного флага отменяет унаследованный доступ к объекту прав для текущей роли, а также для ее родителей. Соответственно его установка имеет смысл только при установленном флаге Derived. Является взаимоисключающим с флагом Allow.
Кроме того, для ряда объектов прав доступ может выдаваться не на сам объект, а на выполнение над объектом операций четырех типов (CRUD):
•Read – чтение объектов и открытие списковой формы объектов данного типа;
•Create – создание нового объекта;
•Update – редактирование объекта;
•Delete – удаление объекта.
Разобравшись с механизмом наследования прав можно перейти к описанию формы редактирования ролей.