Policies: IABACPolicySets;
Свойство Policies предназначено для обращения к коллекции наборов политик.
Данное свойство актуально при определении структуры атрибутного доступа.
Для выполнения примера убедитесь, что существует группа с наименованием «USERS» и объект с ключом «52».
Добавьте ссылки на системные сборки: ABAC, Metabase, Dal, 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 := MS.Policy.ABACRules;
// Зададим алгоритм атрибутного доступа - переопределение разрешением
PolicyObject.CombineAlgorithm := ABACCombineAlgorithm.PermitOverride;
// Очистим структуру атрибутного доступа
PolicyObject.Policies.Clear;
// Добавим набор политик
PolicySet := PolicyObject.Policies.Add;
PolicySet.Name(MB.CurrentLocale) := "Тестовый набор политик";
PolicySet.CombineAlgorithm := ABACCombineAlgorithm.PermitOverride;
// Добавим политику
Policy := PolicySet.Policies.Add;
Policy.Active := True;
Policy.Name(LocaleCodeID.Russian) := "Тестовая политика";
Policy.Id := "POLICY";
Policy.Description(LocaleCodeID.Russian) := "Политика содержит правило для доступа на чтение объекта";
Policy.CombineAlgorithm := ABACCombineAlgorithm.PermitOverride;
Policy.Target.AttributeId := "SUBJECT.NAME";
Policy.Target.Operation := ABACTargetOperation.Equal;
Policy.Target.AttributeValue := "USERS";
// Добавим правило
Rules := Policy.Rules;
Rule := Rules.Add;
Rule.Active := True;
Rule.Name(LocaleCodeID.Russian) := "Тестовое правило";
Rule.Id := "RULE";
Rule.Description(LocaleCodeID.Russian) := "Правило на чтение для группы USERS";
Rule.Target.AttributeId := "OPERATION";
Rule.Target.Operation := ABACTargetOperation.Equal;
Rule.Target.AttributeValue := 2;
Rule.Condition.AsString := "OBJECT.KEY = 52";
Rule.Effect := ABACRuleEffect.Permit;
Debug.WriteLine("Ключ правила: " + Rule.Key.ToString);
// Применим изменения в менеджере безопасности
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 := MS.Policy.ABACRules;
// Зададим алгоритм атрибутного доступа - переопределение разрешением
PolicyObject.CombineAlgorithm := ABACCombineAlgorithm.abacrcaPermitOverride;
// Очистим структуру атрибутного доступа
PolicyObject.Policies.Clear();
// Добавим набор политик
PolicySet := PolicyObject.Policies.Add();
PolicySet.Name(MB.CurrentLocale) := "Тестовый набор политик";
PolicySet.CombineAlgorithm := ABACCombineAlgorithm.abacrcaPermitOverride;
// Добавим политику
Policy := PolicySet.Policies.Add();
Policy.Active := True;
Policy.Name[LocaleCodeID.lcidRussian] := "Тестовая политика";
Policy.Id := "POLICY";
Policy.Description[LocaleCodeID.lcidRussian] := "Политика содержит правило для доступа на чтение объекта";
Policy.CombineAlgorithm := ABACCombineAlgorithm.abacrcaPermitOverride;
Policy.Target.AttributeId := "SUBJECT.NAME";
Policy.Target.Operation := ABACTargetOperation.abactoEqual;
Policy.Target.AttributeValue := "USERS";
// Добавим правило
Rules := Policy.Rules;
Rule := Rules.Add();
Rule.Active := True;
Rule.Name[LocaleCodeID.lcidRussian] := "Тестовое правило";
Rule.Id := "RULE";
Rule.Description[LocaleCodeID.lcidRussian] := "Правило на чтение для группы USERS";
Rule.Target.AttributeId := "OPERATION";
Rule.Target.Operation := ABACTargetOperation.abactoEqual;
Rule.Target.AttributeValue := 2;
Rule.Condition.AsString := "OBJECT.KEY = 52";
Rule.Effect := ABACRuleEffect.abacrePermit;
System.Diagnostics.Debug.WriteLine("Ключ правила: " + Rule.Key.ToString());
// Применим изменения в менеджере безопасности
MS.Apply();
// Освободим лицензию
Lic := Null;
End Sub;
В результате выполнения примера в менеджере безопасности будет активировано использование атрибутного доступа, добавлена заданная структура атрибутного доступа с определенными параметрами политики и правила для разрешения доступа на чтение объекта группе пользователей с наименованием «USERS»:
В консоль будет выведен ключ нового правила:
Ключ правила: 36
См. также: