ISecurityDescriptor.GetEffectiveRightsAudit

Синтаксис

GetEffectiveRightsAudit(Subject: ISecuritySubject; DesiredAccess: Integer; Var Access: Integer; Var Audit: Integer);

Параметры

Subject. Субъект безопасности, для которого необходимо вычислить эффективные права доступа.

DesiredAccess. Желаемые права доступа, относительно которых осуществляется расчет эффективных прав доступа.

Access. Переменная, в которую будет помещено десятичное значение, соответствующее эффективным правам доступа пользователя к объекту.

Audit. Переменная, в которую будет помещено значение, соответствующее аудиту доступа пользователя к объекту.

Описание

Метод GetEffectiveRightsAudit осуществляет вычисление эффективных прав доступа и аудита доступа пользователя к объекту репозитория на основе желаемых прав.

Комментарии

Для указания желаемых прав доступа используется маска доступа. После вычисления в переменных, указанных в параметрах Access и Audit также будет содержаться маска доступа. Значение маски является 4-x байтовым двоичным числом, приведенным к десятичному виду. Для формирования маски желаемых прав доступа, а также для проверки полученных значений необходимо использовать значения перечислимого типа MetabaseObjectPredefinedRights. В этом перечислении содержатся основные и дополнительные операции, на которые можно раздавать права. Для определенных классов объектов доступны специфические операции. Для проверки специфических операций, в зависимости от класса объекта, можно использовать значения следующих перечислений:

Основные, дополнительные и специфические операции, доступные для определенных типов объектов, представлены в разделе Типы событий.

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

Эффективные права, возвращаемые в переменную указанную в параметре 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» будут содержаться значения, соответствующие эффективным правам доступа и аудиту доступа указанного пользователя. Расчет эффективных прав и аудита осуществляется относительно операций Удаление и Изменение прав.

См. также:

ISecurityDescriptor