Менеджер (из пространства имен Ultima.Auth) предназначен для работы с сервисом авторизации и аутентификации. Любые манипуляции с данными в системе Ultima Businessware® совершаются под каким-либо пользователем с конечным набором прав. Права определяют, может ли пользователь совершить то или иное действие или получить доступ к какому-либо объекту. Идеология системы прав такова, что любое действие или возможность доступа к объекту изначально необходимо разрешить, то есть – что не разрешено, то запрещено.

Система прав и ее структура подробно описана в руководстве администратора в разделе "Группа инструментов Access control" главы "Функционал модуля администратора".

DevBookmark_Scripts Интерфейс менеджера 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.

DevBookmark_Scripts Интерфейс IAuthManagerServer (из пространства имен Ultima.Auth) доступен только на сервере приложений и, в дополнение к методам IAuthManager, предлагает установить незащищенный режим с помощью метода SetUnrestrictedMode():

using (AuthManager.SetUnrestrictedMode())

{

 DoSomethingRestricted();

}

Как следствие, все проверки прав вне сервера приложений выполняются в защищенном режиме.

Для обратной ситуации, когда временно необходимо отменить незащищенный режим в командах и прочих скриптах, запускающихся с привилегиями администратора, можно использовать метод SetRestrictedMode().

Интерфейс IAuthManagerServer доступен только на сервере приложений и, в дополнение к методам IAuthManager, предлагает установить незащищенный режим с помощью метода SetUnrestrictedMode():

Примеры использования:

// получаем идентификатор текущего пользователя

long userId = AuthManager.CurrentUserID;

 

// проверяем есть ли у указанного пользователя право администратора

if(AuthManager.UserHasPermission(userId, Permission.Administrator))

{

 // выполнение операции, требующей прав администратора

}