IABACRootPolicyObject.Metabase

Синтаксис

Metabase: Object;

Metabase: System.Object;

Описание

Свойство Metabase возвращает данные репозитория.

Комментарии

Данное свойство актуально при определении отдельной структуры атрибутного доступа.

Пример

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

Sub UserProc;
Var
    Engine: IABACEngine;
    PolicyObject: IABACRootPolicyObject;
    PolicySet: IABACPolicySet;
    Policy: IABACPolicy;
    Res: ABACEvaluateResult;
    MB: IMetabase;
    User, ObjDescr, Env: IABACAttributeInstances;
Begin
    MB := MetabaseClass.Active;
    
// Создадим отдельную структуру атрибутного доступа         
    PolicyObject := New ABACRootPolicyObject.Create;
    PolicyObject.Metabase := MB;
    PolicyObject.CombineAlgorithm := ABACCombineAlgorithm.PermitOverride;
    
// Создадим набор политик
    PolicySet := PolicyObject.Policies.Add;
    PolicySet.Name(LocaleCodeID.None) := 
"Тестовый набор политик";
    PolicySet.CombineAlgorithm := ABACCombineAlgorithm.PermitOverride;
    
// Создадим политику
    Policy := PolicySet.Policies.Add;
    Policy.Name(LocaleCodeID.None) := 
"Тестовая политика";
    Policy.Target.AttributeId := 
"OPERATION";
    Policy.Target.Operation := ABACTargetOperation.Equal;
    Policy.Target.AttributeValue := 
2;
    Policy.CombineAlgorithm := ABACCombineAlgorithm.PermitOverride;
    
// Получим атрибуты первого пользователя, второго объекта и атрибуты среды окружения
    User := MB.Security.Users.Item(0).Attributes;
    ObjDescr := MB.Root.Children.Item(
1).Attributes;
    Env := MB.Security.EnvironmentAttributes;
    
// Выведем в консоль наименование полученного пользователя и объекта
    Debug.WriteLine("Пользователь: " + MB.Security.Users.Item(0).Name);
    Debug.WriteLine(
"Объект: " + MB.Root.Children.Item(1).Name);
    
// Зададим вычислитель доступа пользователя к объекту
    Engine := New ABACEngine.Create;
    Engine.SetEnvironment(Env);
    Engine.SetParams(User, ObjDescr);
    Engine.SetPolicy(PolicyObject); 
// созданная структура атрибутного доступа
    // Проверим доступ на чтение объекта
    Res := Engine.Evaluate(2);
    
Select Case Res As Integer
        
Case 0: Debug.WriteLine("Доступ не определен");
        
Case 1: Debug.WriteLine("Правило не применимо");
        
Case 2: Debug.WriteLine("Доступ разрешен");
        
Case 3: Debug.WriteLine("Доступ запрещен");
    
End Select;
End Sub UserProc;

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

Public Shared Sub Main(Params: StartParams);
Var
    Engine: IABACEngine;
    PolicyObject: ABACRootPolicyObject;
    PolicySet: IABACPolicySet;
    Policy: IABACPolicy;
    Res: ABACEvaluateResult;
    MB: IMetabase;
    User, ObjDescr, Env: IABACAttributeInstances;
Begin
    MB := Params.Metabase;
    
// Создадим отдельную структуру атрибутного доступа         
    PolicyObject := New ABACRootPolicyObject.Create();
    PolicyObject.Metabase := MB;
    PolicyObject.CombineAlgorithm := ABACCombineAlgorithm.abacrcaPermitOverride;
    
// Создим набор политик
    PolicySet := PolicyObject.Policies.Add();
    PolicySet.Name[MB.CurrentLocale] := 
"Тестовый набор политик";
    PolicySet.CombineAlgorithm := ABACCombineAlgorithm.abacrcaPermitOverride;
    
// Создадим политику
    Policy := PolicySet.Policies.Add();
    Policy.Name[MB.CurrentLocale] := 
"Тестовая политика";
    Policy.Target.AttributeId := 
"OPERATION";
    Policy.Target.Operation := ABACTargetOperation.abactoEqual;
    Policy.Target.AttributeValue := 
2;
    Policy.CombineAlgorithm := ABACCombineAlgorithm.abacrcaPermitOverride;
    
// Получим атрибуты первого пользователя, второго объекта и атрибуты среды окружения
    User := MB.Security.Users.Item[0].Attributes;
    ObjDescr := MB.Root.Children.Item[
1].Attributes;
    Env := MB.Security.EnvironmentAttributes;
    
// Выведем в консоль наименование полученного пользователя и объекта
    System.Diagnostics.Debug.WriteLine("Пользователь: " + MB.Security.Users.Item[0].Name);
    System.Diagnostics.Debug.WriteLine(
"Объект: " + MB.Root.Children.Item[1].Name);
    
// Зададим вычислитель доступа пользователя к объекту
    Engine := New ABACEngine.Create();
    Engine.SetEnvironment(Env);
    Engine.SetParams(User, ObjDescr);
    Engine.SetPolicy(PolicyObject); 
// созданная структура атрибутного доступа
    // Проверим доступ на чтение объекта
    Res := Engine.Evaluate(2);
    
Select Case Res As Integer
        
Case 0: System.Diagnostics.Debug.WriteLine("Доступ не определен");
        
Case 1: System.Diagnostics.Debug.WriteLine("Правило не применимо");
        
Case 2: System.Diagnostics.Debug.WriteLine("Доступ разрешен");
        
Case 3: System.Diagnostics.Debug.WriteLine("Доступ запрещен");
    
End Select;
End Sub;

В результате выполнения примера для вычисления доступа на чтение объекта будет использоваться отдельно заданная структура атрибутного доступа.

В консоль будет выведен результат доступа:

Пользователь: ADMIN

Объект: Системные объекты

Доступ разрешен

См. также:

IABACRootPolicyObject