Права доступа на элементы справочника НСИ

Атрибутный метод разграничения доступа позволяет задавать права доступа на отдельные элементы справочника НСИ. Разграничение прав доступа на элементы справочников НСИ выполняется:

Атрибут элемента задается в виде «OBJECT.ELEMENT.<идентификатор атрибута>». Идентификаторы атрибута содержатся на вкладке «Атрибуты» при открытии справочника на редактирование.

Примечание. Атрибут элемента задается только в дополнительном условии правила. При составлении дополнительного условия учитывайте особенности использования атрибута.

Операции над элементами справочника НСИ содержатся в перечислении DictionarySpecificRights.

Для получения подробной информации о разграничении прав доступа на элементы справочников НСИ обратитесь к разделу «Права доступа на элементы справочников НСИ».

Рассмотрим пример запрета доступа пользователю на чтение элемента справочника НСИ с ключом 1 при одновременном использовании атрибутного и дискреционного методов разграничения доступа.

Пример

Для выполнения примера должны выполняться условия:

Дискреционные права доступа настраиваются отдельно для каждого объекта на вкладке «Дискреционный контроль» в окне «Параметры управления доступом».

Добавьте ссылки на системные сборки: ABAC, Metabase, Rds.

Sub UserProc;
Var
    PolicyObject: IABACRootPolicyObject;
    PolicySet: IABACPolicySet;
    Policy: IABACPolicy;
    Rules: IABACRules;
    Rule: IABACRule;
    MB: IMetabase;
    MS: IMetabaseSecurity;
    Lic: Object;
    DimObj: IMetabaseObject;
    Dim: IRdsDictionary;
Begin
    MB := MetabaseClass.Active;
    //Получим лицензию для возможности работы с менеджером безопасности
    Lic := MB.RequestLicense(UiLicenseFeatureType.Adm);
    MS := MB.Security;
    // Зададим признак «Элементы имеют атрибутные права доступа» для справочника НСИ
    DimObj := MB.ItemById("DICTIONARY").Edit;
    Dim := DimObj As IRdsDictionary;
    Dim.AbacSecured := True;
    DimObj.Save;
    // Получим структуру атрибутного доступа
    PolicyObject := MB.Security.Policy.ABACRules;
    // Очистим структуру атрибутного доступа и зададим новую
    PolicyObject.Policies.Clear;        
    // Зададим алгоритм корневой политики атрибутного доступа - переопределение разрешением
    PolicyObject.CombineAlgorithm := ABACCombineAlgorithm.PermitOverride;
    // Добавим набор политик
    PolicySet := PolicyObject.Policies.Add;
    PolicySet.Name(MB.CurrentLocale) := "Набор политик для пользователя «USER»";
    PolicySet.Target.AttributeId := "SUBJECT.NAME";
    PolicySet.Target.Operation := ABACTargetOperation.Equal;
    PolicySet.Target.AttributeValue := "USER";
    PolicySet.CombineAlgorithm := ABACCombineAlgorithm.PermitOverride;
    // Добавим политику для доступа к справочнику НСИ с идентификатором DICTIONARY
    Policy := PolicySet.Policies.Add;
    Policy.Name(MB.CurrentLocale) := "Разрешение доступа к справочнику НСИ";
    Policy.Target.AttributeId := "OBJECT.ID";
    Policy.Target.Operation := ABACTargetOperation.Equal;
    Policy.Target.AttributeValue := "DICTIONARY";
    Policy.CombineAlgorithm := ABACCombineAlgorithm.PermitOverride;
    // Добавим правило на запрет доступа к элементу справочника НСИ с ключом 1
    Rules := Policy.Rules;
    Rule := Rules.Add;
    Rule.Name(LocaleCodeID.Russian) := "Запрет доступа к элементу справочника НСИ";
    Rule.Target.AttributeId := "OPERATION";
    Rule.Target.Operation := ABACTargetOperation.Equal;
    Rule.Target.AttributeValue := 1048576;
    Rule.Condition.AsString := "OBJECT.ELEMENT.KEY = 1";
    Rule.Effect := ABACRuleEffect.Deny;
    // Применим изменения в менеджере безопасности
    MS.Apply;
    // Освободим лицензию
    Lic := Null;
End Sub UserProc;

В результате выполнения примера:

При выполнении атрибутного доступа в навигаторе объектов для пользователя «USER» не будет отображаться элемент справочника НСИ с ключом 1.

См. также:

Примеры | Права доступа на элементы справочников НСИ | Базовые настройки справочника