Показать содержание 

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

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

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

Атрибут элемента задается в виде «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.

См. также:

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