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

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

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

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

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

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

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

Пример

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

Добавьте ссылки на системные сборки: ABAC, Metabase, ForeSystem (для примера на Fore.NET).

Sub UserProc;
Var
    PolicyObject: IABACRootPolicyObject;
    PolicySet: IABACPolicySet;
    Policy: IABACPolicy;
    Rules: IABACRules;
    Rule: IABACRule;
    MB: IMetabase;
    MS: IMetabaseSecurity;
    Lic: Object;
Begin
    MB := MetabaseClass.Active;
    
//Получим лицензию для возможности работы с менеджером безопасности
    Lic := MB.RequestLicense(UiLicenseFeatureType.Adm);
    MS := MB.Security;
    
// Активируем использование атрибутного доступа
    MS.Policy.AttributeBasedAccessControl := True;
     
    
// Получим структуру атрибутного доступа
    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;
     
    
// Добавим политику для доступа базе данных с ключом «60»
    Policy := PolicySet.Policies.Add;
    Policy.Name(MB.CurrentLocale) := 
"Разрешение доступа к базе данных";
    Policy.Target.AttributeId := 
"OBJECT.KEY";
    Policy.Target.Operation := ABACTargetOperation.Equal;
    Policy.Target.AttributeValue := 
60;
    Policy.CombineAlgorithm := ABACCombineAlgorithm.PermitOverride;
      
    
// Добавим правила на доступ к чтению данных и метаданных объекта
    Rules := Policy.Rules;  
    Rule := Rules.Add;
    Rule.Name(LocaleCodeID.Russian) := 
"Доступ на чтение данных";
    Rule.Target.AttributeId := 
"OPERATION";
    Rule.Target.Operation := ABACTargetOperation.IN_;
    Rule.Target.AttributeValue := 
2;
    Rule.Effect := ABACRuleEffect.Permit;
    Rule := Rules.Add;
    Rule.Name(LocaleCodeID.Russian) := 
"Доступ на чтение метаданных";
    Rule.Target.AttributeId := 
"OPERATION";
    Rule.Target.Operation := ABACTargetOperation.Equal;
    Rule.Target.AttributeValue := 
4096;
    Rule.Effect := ABACRuleEffect.Permit;
        
    
// Добавим политику для доступа к таблице с идентификатором «TABLE», используемой табличным справочником НСИ
    Policy := PolicySet.Policies.Add;
    Policy.Name(MB.CurrentLocale) := 
"Разрешение доступа к таблице";
    Policy.Target.AttributeId := 
"OBJECT.ID";
    Policy.Target.Operation := ABACTargetOperation.Equal;
    Policy.Target.AttributeValue := 
"TABLE";
    Policy.CombineAlgorithm := ABACCombineAlgorithm.PermitOverride;
        
    
// Добавим правило на полный доступ к таблице
    Rules := Policy.Rules;  
    Rule := Rules.Add;
    Rule.Name(LocaleCodeID.Russian) := 
"Полный доступ к таблице";
    Rule.Target.AttributeId := 
"OPERATION";
    Rule.Target.Operation := ABACTargetOperation.IN_;
    Rule.Target.AttributeValue := 
1;
    Rule.Effect := ABACRuleEffect.Permit;
      
    
// Добавим политику для доступа к табличному справочнику НСИ с идентификатором «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;
       
    
// Добавим правило на полный доступ к табличному справочнику НСИ
    Rules := Policy.Rules;
    Rule := Rules.Add;
    Rule.Name(LocaleCodeID.Russian) := 
"Полный доступ к справочнику НСИ";
    Rule.Target.AttributeId := 
"OPERATION";
    Rule.Target.Operation := ABACTargetOperation.IN_;
    Rule.Target.AttributeValue := 
1;
    Rule.Effect := ABACRuleEffect.Permit;
     
    
// Добавим правило на запрет доступа к элементу справочника НСИ с ключом «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;

Imports Prognoz.Platform.Interop.ABAC;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.ForeSystem;

Public Shared Sub Main(Params: StartParams);
Var
    PolicyObject: IABACRootPolicyObject;
    PolicySet: IABACPolicySet;
    Policy: IABACPolicy;
    Rules: IABACRules;
    Rule: IABACRule;
    MB: IMetabase;
    MS: IMetabaseSecurity;
    Lic: Object;
Begin
    MB := Params.Metabase;
    
//Получим лицензию для возможности работы с менеджером безопасности
    Lic := MB.RequestLicense(UiLicenseFeatureType.lftAdm);
    MS := MB.Security;
    
// Активируем использование атрибутного доступа
    MS.Policy.AttributeBasedAccessControl := True;
        
    
// Получим структуру атрибутного доступа
    PolicyObject := MB.Security.Policy.ABACRules;
    
// Очистим структуру атрибутного доступа и зададим новую
    PolicyObject.Policies.Clear;        
    
// Зададим алгоритм корневой политики атрибутного доступа - переопределение разрешением
    PolicyObject.CombineAlgorithm := ABACCombineAlgorithm.abacrcaPermitOverride;

    
// Добавим набор политик
    PolicySet := PolicyObject.Policies.Add();
    PolicySet.Name[MB.CurrentLocale] := 
"Набор политик для пользователя «USER»";
    PolicySet.Target.AttributeId := 
"SUBJECT.NAME";
    PolicySet.Target.Operation := ABACTargetOperation.abactoEqual;
    PolicySet.Target.AttributeValue := 
"USER";
    PolicySet.CombineAlgorithm := ABACCombineAlgorithm.abacrcaPermitOverride;
      
    
// Добавим политику для доступа базе данных с ключом «60»
    Policy := PolicySet.Policies.Add();
    Policy.Name[MB.CurrentLocale] := 
"Разрешение доступа к базе данных";
    Policy.Target.AttributeId := 
"OBJECT.KEY";
    Policy.Target.Operation := ABACTargetOperation.abactoEqual;
    Policy.Target.AttributeValue := 
60;
    Policy.CombineAlgorithm := ABACCombineAlgorithm.abacrcaPermitOverride;
      
    
// Добавим правила на доступ к чтению данных и метаданных объекта
    Rules := Policy.Rules;  
    Rule := Rules.Add();
    Rule.Name[MB.CurrentLocale] := 
"Доступ на чтение данных";
    Rule.Target.AttributeId := 
"OPERATION";
    Rule.Target.Operation := ABACTargetOperation.abactoIN;
    Rule.Target.AttributeValue := 
2;
    Rule.Effect := ABACRuleEffect.abacrePermit;
    Rule := Rules.Add();
    Rule.Name[MB.CurrentLocale] := 
"Доступ на чтение метаданных";
    Rule.Target.AttributeId := 
"OPERATION";
    Rule.Target.Operation := ABACTargetOperation.abactoEqual;
    Rule.Target.AttributeValue := 
4096;
    Rule.Effect := ABACRuleEffect.abacrePermit;
        
    
// Добавим политику для доступа к таблице с идентификатором «TABLE», используемой табличным справочником НСИ
    Policy := PolicySet.Policies.Add();
    Policy.Name[MB.CurrentLocale] := 
"Разрешение доступа к таблице";
    Policy.Target.AttributeId := 
"OBJECT.ID";
    Policy.Target.Operation := ABACTargetOperation.abactoEqual;
    Policy.Target.AttributeValue := 
"TABLE";
    Policy.CombineAlgorithm := ABACCombineAlgorithm.abacrcaPermitOverride;
        
    
// Добавим правило на полный доступ к таблице
    Rules := Policy.Rules;  
    Rule := Rules.Add();
    Rule.Name[MB.CurrentLocale] := 
"Полный доступ к таблице";
    Rule.Target.AttributeId := 
"OPERATION";
    Rule.Target.Operation := ABACTargetOperation.abactoIN;
    Rule.Target.AttributeValue := 
1;
    Rule.Effect := ABACRuleEffect.abacrePermit;
      
    
// Добавим политику для доступа к табличному справочнику НСИ с идентификатором «DICTIONARY»
    Policy := PolicySet.Policies.Add();
    Policy.Name[MB.CurrentLocale] := 
"Разрешение доступа к справочнику НСИ";
    Policy.Target.AttributeId := 
"OBJECT.ID";
    Policy.Target.Operation := ABACTargetOperation.abactoEqual;
    Policy.Target.AttributeValue := 
"DICTIONARY";
    Policy.CombineAlgorithm := ABACCombineAlgorithm.abacrcaPermitOverride;
     
    
// Добавим правило на полный доступ к табличному справочнику НСИ
    Rules := Policy.Rules;
    Rule := Rules.Add();
    Rule.Name[MB.CurrentLocale] := 
"Полный доступ к справочнику НСИ";
    Rule.Target.AttributeId := 
"OPERATION";
    Rule.Target.Operation := ABACTargetOperation.abactoIN;
    Rule.Target.AttributeValue := 
1;
    Rule.Effect := ABACRuleEffect.abacrePermit;
        
    
// Добавим правило на запрет доступа к элементу справочника НСИ с ключом «1»
    Rules := Policy.Rules;
    Rule := Rules.Add();
    Rule.Name[MB.CurrentLocale] := 
"Доступ к элементу справочника НСИ";
    Rule.Target.AttributeId := 
"OPERATION";
    Rule.Target.Operation := ABACTargetOperation.abactoEqual;
    Rule.Target.AttributeValue := 
1048576;
    Rule.Condition.AsString := 
"OBJECT.ELEMENT.KEY = 1";
    Rule.Effect := ABACRuleEffect.abacreDeny;
       
    
// Применим изменения в менеджере безопасности
    MS.Apply();
    
// Освободим лицензию
    Lic := Null;
End Sub;

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

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

См. также:

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