Grant – выдать права
Метод используется для выдачи определенного типа прав на сущность. Изменения сохраняются только после вызова метода Save() у сущности или прав доступа.
Примечание. Метод Grant() не работает для документов с включенным строгим доступом, если действие выполняется от пользователя:
•у которого нет полных прав на документ;
•входящего в роль «Служебные пользователи». При этом программный код выполняется на сервисе, и для документа включен усиленный строгий доступ;
•входящего в роль «Служебные пользователи», и у него нет полных прав на документ. При этом программный код выполняется не на сервисе.
В этой ситуации в лог-файл записывается информация, что права не могут быть выданы.
Синтаксис
C# |
public void Grant(IRecipient recipient, params Guid[] accessRightsTypes); |
Параметры
recipient – субъект прав. Субъект – тот, кто выполняет действие. Например, пользователь, группа пользователей, роль;
accessRightsTypes – список типов прав. Базовые типы прав доступа можно получить с помощью класса DefaultAccessRightsTypes:
•Approve – утверждение;
•Change – изменение;
•Create – создание;
•Forbidden – доступ запрещен;
•FullAccess – полный доступ;
•Read – чтение.
Пример 1. Выдача прав на чтение документа в событии «После сохранения» типа документа
// Выдать права на документ сотруднику, указанному в поле
// «Ответственный» (Responsible) карточки документа.
public override void AfterSave(Sungero.Domain.AfterSaveEventArgs e)
{
// Проверить, есть ли у сотрудника права на чтение документа.
if (!_obj.AccessRights.CanRead(_obj.Responsible))
// Если нет – выдать.
_obj.AccessRights.Grant(_obj.Responsible, DefaultAccessRightsTypes.Read);
}
Пример 2. Выдача прав на изменение в событии «До сохранения» типа справочника «Группы регистрации»
// Выдать ответственному (Responsible) права на изменение данной группы.
if (_obj.Responsible != null)
_obj.AccessRights.Grant(_obj.Responsible, DefaultAccessRightsTypes.Change);
Пример 3. Выдача прав всем на «общие» справочники в функции инициализации модуля
/// Выдать права всем пользователям на справочники.
/// <param name="allUsers"> Группа «Все пользователи».</param>
[Remote]
public static void GrantRightsOnDatabooks(IRole allUsers)
{
// Модуль «Общие справочники».
Commons.Countries.AccessRights.Grant(allUsers, DefaultAccessRightsTypes.Read);
Commons.Regions.AccessRights.Grant(allUsers, DefaultAccessRightsTypes.Read);
Commons.Cities.AccessRights.Grant(allUsers, DefaultAccessRightsTypes.Read);
Commons.Currencies.AccessRights.Grant(allUsers, DefaultAccessRightsTypes.Read);
Commons.Countries.AccessRights.Save();
Commons.Regions.AccessRights.Save();
Commons.Cities.AccessRights.Save();
Commons.Currencies.AccessRights.Save();
}
ВАЖНО. В событии «Создание» (Created) можно выдать права доступа для роли, группы или пользователя на создаваемую сущность. При этом отключается стандартное поведение системы: автор не получит полные права на сущность. Если автору тоже нужны полные права, их нужно выдать явно, например:
public override void Created(Sungero.Domain.CreatedEventArgs e)
{
base.Created(e);
_obj.AccessRights.Grant(Roles.AllUsers, Constants.DocumentKind.DocumentKindChoiseAccessRightType);
_obj.AccessRights.Grant(Users.Current, DefaultAccessRightsTypes.FullAccess);
}
© Компания Directum, 2024 |