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