GetEffectiveRightsAudit(Subject: ISecuritySubject; DesiredAccess: Integer; Var Access: Integer; Var Audit: Integer);
Subject. Субъект безопасности, для которого необходимо вычислить эффективные права доступа.
DesiredAccess. Желаемые права доступа, относительно которых осуществляется расчет эффективных прав доступа.
Access. Переменная, в которую будет помещено десятичное значение, соответствующее эффективным правам доступа пользователя к объекту.
Audit. Переменная, в которую будет помещено значение, соответствующее аудиту доступа пользователя к объекту.
Метод GetEffectiveRightsAudit осуществляет вычисление эффективных прав доступа и аудита доступа пользователя к объекту репозитория на основе желаемых прав.
Для указания желаемых прав доступа используется маска доступа. После вычисления в переменных, указанных в параметрах Access и Audit также будет содержаться маска доступа. Значение маски является 4-x байтовым двоичным числом, приведенным к десятичному виду. Для формирования маски желаемых прав доступа, а также для проверки полученных значений необходимо использовать значения перечислимого типа MetabaseObjectPredefinedRights. В этом перечислении содержатся основные и дополнительные операции, на которые можно раздавать права. Для определенных классов объектов доступны специфические операции. Для проверки специфических операций, в зависимости от класса объекта, можно использовать значения следующих перечислений:
CalculatedCubeSpecificRights - специфические операции, доступные для вычисляемых кубов.
CubeLoaderSpecificRights - специфические операции, доступные для загрузчика данных в куб.
CubeSpecificRights - специфические операции, доступные для различных видов кубов.
CustomObjectSpecificRights - специфические операции, доступные для объектов пользовательских классов.
DataBaseSpecificRights - специфические операции, доступные для объекта репозитория - База данных.
DictionarySpecificRights - специфические операции, доступные для объектов репозитория - Справочник НСИ и Составной справочник НСИ.
MDCalcSpecificRights - специфические операции, доступные для объекта репозитория - Многомерный расчет на сервере БД.
ProblemSpecificRights - специфические операции, доступные для объекта контейнера моделирования - Задача моделирования.
ProcedureSpecificRights - специфические операции, доступные для объекта репозитория - Процедура.
ScenarioDimensionSpecificRights - специфические операции, доступные для объекта репозитория - Сценарий моделирования.
TableSpecificRights - специфические операции, доступные для следующих объектов репозитория - Таблица, Представление, Журнал, Присоединенная таблица.
ValidationSpecificRights - специфические операции, доступные для объекта репозитория - Правило валидации и Группа валидаций.
Основные, дополнительные и специфические операции, доступные для определенных типов объектов, представлены в разделе Типы событий.
Для разбора значения маски необходимо реализовать пользовательскую функцию, которая позволит сопоставить отдельные биты маски соответствующим значениям перечислений. Пример работы с маской доступа представлен в разделе Примеры: Работа с маской доступа.
Эффективные права, возвращаемые в переменную указанную в параметре Access, формируются на основе желаемых прав доступа. Если имеются какие-либо операции, зависящие от основных и дополнительных операций, то они также будут включены в эффективные права.
Для получения значения, соответствующего аудиту доступа пользователя к объекту, сначала необходимо подсчитать максимальное значение аудита, доступное для объектов данного класса. Затем к полученному значению необходимо прибавить значение переменной, указанной в параметре Audit. Если результирующее значение отлично от нуля, значит для текущего пользователя ведется аудит операций, указанных в желаемых правах.
Для выполнения примера предполагается наличие в репозитории объекта с идентификатором «Obj_1». Среди субъектов безопасности, созданных в менеджере безопасности текущего репозитория, имеется пользователь «TestUser».
Sub UserProc;
Var
MB: IMetabase;
MDesc: IMetabaseObjectDescriptor;
SecDesc: ISecurityDescriptor;
Subj: ISecuritySubject;
Access, Audit: Integer;
Begin
MB := MetabaseClass.Active;
Subj := MB.Security.ResolveName("TestUser");
MDesc := MB.ItemById("Obj_1");
SecDesc := MDesc.SecurityDescriptor;
SecDesc.GetEffectiveRightsAudit(Subj,
MetabaseObjectPredefinedRights.Delete Or
MetabaseObjectPredefinedRights.Access,
Access, Audit);
End Sub UserProc;
После выполнения примера в переменных «Access» и «Audit» будут содержаться значения, соответствующие эффективным правам доступа и аудиту доступа указанного пользователя. Расчет эффективных прав и аудита осуществляется относительно операций Удаление и Изменение прав.
См. также: