UserRights_Roles_ Роли организованы в справочнике Roles в древовидной структуре, где у каждой роли может быть несколько родителей и потомков:

Roles_Dictionary

Окно справочника разделено на две части: слева отображается дерево ролей, справа – дочерние роли первого уровня выбранной слева роли.

В дереве слева роли всегда отсортированы по алфавиту, а папки Roles_Dictionary_Button6 всегда идут перед обычными ролями.

Записи справочника можно искать по Названию роли (Role name). Поиск осуществляется по вхождению искомого текста в название роли при нажатии на кнопку Roles_Dictionary_Button5 элемента управления или клавишу Key-Enter. При удачном поиске курсор устанавливается на первую удовлетворяющую условиям найденную запись, при неудачном – остается на прежней. Повторное нажатие на кнопку поиска Roles_Dictionary_Button5 приведет к нахождению следующей удовлетворяющей условию поиска записи и установке курсора на нее.

Роль также может быть папкой. Такие роли обозначаются в справочнике иконкой Roles_Dictionary_Button6 перед названием. Роли-папки не наделены никакими правами. Они предназначены исключительно для удобства организации структуры ролей и используются, например, для их группировки. Функциональность ролей-папок ограничена рядом запретов:

с помощью роли-папки нельзя выдать доступ к какому-либо объекту прав;

роль-папку нельзя назначить пользователю;

роль-папку нельзя сделать потомком для другой роли, если она также не является папкой.

Функционал справочника ролей позволяет выполнять следующие действия:

Roles_Dictionary_Button1 создавать новые роли. Новая роль будет создана на самом верхнем уровне независимо от того, какая роль выбрана слева в дереве;

Roles_Dictionary_Button2 удалять выбранные роли, не являющиеся папками;

Roles_Dictionary_Button3 создавать роли-папки с именем, введенным в поле Folder role name, не открывая форму создания новой роли. Новая роль-папка будет создана на самом верхнем уровне независимо от того, какая роль-папка выбрана слева в дереве;

Roles_Dictionary_Button4 удалять выбранные роли-папки.

35_important

Каждая роль может обладать неограниченным числом потомков, а также может быть потомком для неограниченного числа родителей.

35_important

Определить для роли роль-родитель нельзя, только наоборот. Именно поэтому при создании новой роли она всегда оказывается на верхнем уровне дерева.

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

Древовидная организация справочника Ролей несет также важную функциональную нагрузку: роль-родитель наследует все права, которыми обладают ее роли-потомки в не зависимости от их уровня вложенности. Например, роли, определяющие функционал подчиненных, будучи потомками роли начальника отдела дают ему возможность совершать все доступные им операции.

Roles_ParentAndChildren

Таким образом, объекты прав могут быть либо в явном виде разрешены (allow) для роли, либо унаследованы ей от роли-потомка (derived).

Унаследованные от потомков права могут быть также разрешены для роли-родителя в явном виде, чтобы в случае исключения их из роли-потомка роль-родитель не лишилась требуемого права.

Может, однако, возникнуть такая ситуация, когда роль-потомок обладает некими правами, а роль-родитель этими правами обладать не должна. Например, роль кладовщика имеет право на осуществление отгрузки товара со склада. Одновременно она является потомком роли начальника склада. Но начальник склада не является материально-ответственным лицом и не имеет права осуществлять такую отгрузку. Лишить роль-родитель начальника склада этого функционала можно отменив (revoke) соответствующее унаследованное им от роли-потомка разрешение.

Такое отмененное разрешение не будет унаследовано ролью-родителем. Например, выдавая права роли Младшего подчиненного, мы тем самым выдаем их и ролям-родителям Старшему подчиненному и Начальнику отдела.

Roles_ParentAndChildren2

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

35_important

Если у роли роли-родителя есть две роли-потомка одного уровня, у одной из которых некое право выдано (allow), а у другой то же самое наоборот отменено (revoke), данное право ролью-родителем будет унаследовано. То есть разрешение доступа (allow) при наследовании приоритетнее запрета (revoke).

Roles_ParentAndChildren3

Резюмируя вышесказанное, доступ к объекту прав в форме редактирования роли устанавливается с помощью флагов:

Derived – доступ унаследован от роли-потомка. Снять этот флаг нельзя;

Allow – разрешен. Этот флаг можно проставить в том числе и при уже установленном флаге Derived. Является взаимоисключающим с флагом Revoke;

Revoke – отменен. Установка данного флага отменяет унаследованный доступ к объекту прав для текущей роли, а также для ее родителей. Соответственно его установка имеет смысл только при установленном флаге Derived. Является взаимоисключающим с флагом Allow.

Кроме того, для ряда объектов прав доступ может выдаваться не на сам объект, а на выполнение над объектом операций четырех типов (CRUD):

Read – чтение объектов и открытие списковой формы объектов данного типа;

Create – создание нового объекта;

Update – редактирование объекта;

Delete – удаление объекта.

Разобравшись с механизмом наследования прав можно перейти к описанию формы редактирования ролей.