Менеджер (из пространства имен Ultima.Auth) предназначен для работы с сервисом авторизации и аутентификации. Любые манипуляции с данными в системе Ultima Businessware® совершаются под каким-либо пользователем с конечным набором прав. Права определяют, может ли пользователь совершить то или иное действие или получить доступ к какому-либо объекту. Идеология системы прав такова, что любое действие или возможность доступа к объекту изначально необходимо разрешить, то есть – что не разрешено, то запрещено.
Система прав и ее структура подробно описана в руководстве администратора в разделе "Группа инструментов Access control" главы "Функционал модуля администратора".
Интерфейс менеджера IAuthManager имеет следующие свойства и реализует следующие методы:
•IsAllowed(long permissionId) – возвращает true, если текущему пользователю предоставлен доступ, ограниченный указанным правом (permission):
▪permissionId – идентификатор права;
•IsAllowed(KernelPermissions permission) – возвращает true, если текущему пользователю предоставлен доступ, ограниченный указанным элементарным правом (KernelPermissions):
▪permission – элементарное право (KernelPermissions);
•UserHasPermission(long userId, long permissionId) – возвращает true, если указанному пользователю предоставлено указанное право (permission):
▪userId – идентификатор пользователя;
▪permissionId – идентификатор права;
•UserHasPermission(long userId, KernelPermissions permission) – возвращает true, если указанному пользователю предоставлено указанное элементарное право (KernelPermissions), встроенное в ядро:
▪userId – идентификатор пользователя;
▪permission – право KernelPermissions, может принимать значения:
▪None = 0 – нет никаких разрешений;
▪LoginAs = 1 – разрешено входить в систему под чужим именем;
•UserHasDictionaryPermission(long userId, Type dictionaryType, AccessOperation accOperation) – возвращает true, если указанному пользователю предоставлено указанной право на выполнение операции над справочником:
▪userId – идентификатор пользователя;
▪dictionaryType – тип справочника;
▪accOperation – операция AccessOperation, может принимать значения:
▪Read = 1;
▪Create = 2;
▪Update = 4;
▪Delete = 8;
•UserHasSubTypePermission(long userId, long subTypeId, AccessOperation accOperation) – возвращает true, если указанному пользователю предоставлено указанное право на выполнение операции над подтипом документа:
▪userId – идентификатор пользователя;
▪subTypeId – идентификатор подтипа документа;
▪accOperation – операция AccessOperation;
•IsAllowed(Type dictionaryType, AccessOperation accOperation) – возвращает true, если текущему пользователю предоставлено право выполнения указанной операции над справочником:
▪dictionaryType – тип справочника;
▪accOperation – операция AccessOperation;
•IsAllowed(long subtypeId, AccessOperation accOperation) – возвращает true, если текущему пользователю предоставлено право выполнения указанной операции над подтипом документа:
▪subTypeId – идентификатор подтипа документа;
▪accOperation – операция AccessOperation;
•IsScriptAllowed(long scriptId) – определяет, может ли указанный скрипт быть выполнен:
▪scriptId – идентификатор скрипта;
•CurrentUserID, типа long – возвращает идентификатор текущего пользователя;
•CurrentUser, типа UltimaIdentity – возвращает текущего пользователя;
•DemandPermission(long permissionId, string operation = null) – определяет, есть ли у пользователя указанное разрешение, если нет – выдает стандартное исключение вида "Permission denied. You don't have permission {permissionId}{permission name} which is necessary to {operation}":
▪permissionId – идентификатор разрешения;
▪operation – операция, для которой необходимо разрешение. Значение параметра используется в тексте исключения, выдаваемого при отсутствии разрешения у пользователя.
Основное отличие между методами групп HasPermission и IsAllowed в том, что HasPermission проверяет, есть ли физически указанное право у пользователя, а IsAllowed – может ли пользователь выполнить действие или получить доступ, ограниченный указанным правом. Например, в незащищенном режиме (при использовании в команде), если пользователь не обладает указанным правом, метод HasPermission вернет false, при этом для этого же права метод IsAllowed венет true.
Интерфейс IAuthManagerServer (из пространства имен Ultima.Auth) доступен только на сервере приложений и, в дополнение к методам IAuthManager, предлагает установить незащищенный режим с помощью метода SetUnrestrictedMode():
using (AuthManager.SetUnrestrictedMode()) { DoSomethingRestricted(); } |
Как следствие, все проверки прав вне сервера приложений выполняются в защищенном режиме.
Для обратной ситуации, когда временно необходимо отменить незащищенный режим в командах и прочих скриптах, запускающихся с привилегиями администратора, можно использовать метод SetRestrictedMode().
Интерфейс IAuthManagerServer доступен только на сервере приложений и, в дополнение к методам IAuthManager, предлагает установить незащищенный режим с помощью метода SetUnrestrictedMode():
Примеры использования:
// получаем идентификатор текущего пользователя long userId = AuthManager.CurrentUserID;
// проверяем есть ли у указанного пользователя право администратора if(AuthManager.UserHasPermission(userId, Permission.Administrator)) { // выполнение операции, требующей прав администратора } |