IABACEngine.Evaluate

Синтаксис

Evaluate(Operation: Integer): ABACEvaluateResult;

Evaluate(System.Int32): Prognoz.Platform.Interop.ABAC.ABACEvaluateResult;

Параметры

Operation. Значение основной или специфической операции над объектом. Списки кодов специфических операций содержатся в перечислениях сборки Metabase.

Примечание. Если в цели задан атрибут среды окружения «OPERATION» с условием «IN», то параметр может принимать значение дочерней операции. Например, в цели атрибутного доступа задана операция «2 - Чтение», тогда параметр метода может принимать значение «256 - Чтение дескриптора».

Описание

Метод Evaluate возвращает результат доступа субъекта к объекту.

Комментарии

Если в цели задан атрибут среды окружения «OPERATION» с условием «IN», то для вычисления метода Evaluate используйте метод IABACEngine.SetOperations, иначе задайте значение переменной «Operation» аналогично значению в цели атрибутного доступа.

Пример

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

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

Public Class Callback:Object, IABACEvaluateCallback
    
Public Function AttrValue(Id: String; Var Success: Boolean): Object;
    
Begin
        Success := 
False;
    
Return Null;
    
End Function AttrValue; 
    
    
Public Function AttrValueRaw(Id:String; Var Result:Variant):Boolean;
    
Var 
        Success: Boolean;
    
Begin
        
If Id = "ATTR1" Then
            Result := 
123;
            Success := 
True;
        
Else
            Success := 
False;   
        
End If;
        Return Success;
    
End Function AttrValueRaw;
End Class Callback;

Sub UserProc;
Var
    MB: IMetabase;
    MS: IMetabaseSecurity;
    Calb: Callback;
    Engine: IABACEngine;
    Res: ABACEvaluateResult;
    User, Obj, Env: IABACAttributeInstances;
Begin
    MB := MetabaseClass.Active;
    MS := MB.Security;
    
// Получим атрибуты среды окружения
    Env := MS.EnvironmentAttributes;
    
// Получим атрибуты первого пользователя и объекта с ключом «12254»
    User := MS.Users.Item(0).Attributes;
    Obj := MB.Root.Children.FindByKey(
12254).Attributes;
    
// Выведем в консоль наименование полученного пользователя и объекта
    Debug.WriteLine("Пользователь: " + MS.Users.Item(0).Name);
    Debug.WriteLine(
"Объект: " + MB.Root.Children.FindByKey(12254).Name);
    
// Зададим методы для вычисления доступа пользователя к объекту
    Engine := New ABACEngine.Create;
    Engine.SetEnvironment(Env);
    Engine.SetParams(User, Obj);
    Engine.SetCallback(Calb);
    Engine.SetOperations(
2,4,1);
    
// Зададим структуру атрибутного доступа, которая содержится в менеджере безопасности
    Engine.SetPolicy(MB.Security.Policy.ABACRules);
    
// Проверим доступ на чтение дескриптора объекта и выведем результат в консоль
    Res := Engine.Evaluate(256);
    
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 Class Callback:Object, IABACEvaluateCallback
    
Public Function AttrValueRaw(Id: String; Result: IntPtr): SByte;
    
Var 
        Success: SByte;
    
Begin
        
If Id = "ATTR1" Then
            Result := 
123 As IntPtr;
            Success := 
1;
        
Else
            Success := 
0;
            Result := 
Null As IntPtr;
        
End If;
        
Return Success;
    
End Function AttrValueRaw;
    
    
Public Function AttrValue(Id: String; Var Success: Boolean): Object;
    
Var
        Result: Object;
    
Begin
        
If Id = "ATTR1" Then
            Result := 
123 As Object;
            Success := 
True;
        
Else
            Success := 
False;
            Result :=
0;
        
End If;
    
Return Result;
    
End Function AttrValue; 
End Class Callback;

Public Class Program
    [STAThread]
    
Public Shared Sub Main(Params: StartParams);
    
Var
        MB: IMetabase;
        MS: IMetabaseSecurity;
        Calb: Callback;
        Engine: IABACEngine;
        Res: ABACEvaluateResult;
        User, Obj, Env: IABACAttributeInstances;
    
Begin
        MB := Params.Metabase;
        MS := MB.Security;
        
// Получим атрибуты среды окружения
        Env := MS.EnvironmentAttributes;
        
// Получим атрибуты первого пользователя и объекта с ключом «12254»
        User := MS.Users.Item[0].Attributes;
        Obj := MB.Root.Children.FindByKey(
12254).Attributes;
        
// Выведем в консоль наименование полученного пользователя и объекта
        System.Diagnostics.Debug.WriteLine("Пользователь: " + MS.Users.Item[0].Name);
        System.Diagnostics.Debug.WriteLine(
"Объект: " + MB.Root.Children.FindByKey(12254).Name);
        
// Зададим методы для вычисления доступа пользователя к объекту
        Engine := New ABACEngine.Create();
        Engine.SetEnvironment(Env);
        Engine.SetParams(User, Obj);
        Engine.SetCallback(Calb);
        Engine.SetOperations(
2,4,1);
        
// Зададим структуру атрибутного доступа, которая содержится в менеджере безопасности
        Engine.SetPolicy(MB.Security.Policy.ABACRules);
        
// Проверим доступ на чтение дескриптора объекта и выведем результат в консоль
        Res := Engine.Evaluate(256);
        
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;
End Class;

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

  1. При проверке цели атрибутного доступа будет найден атрибут «ATTR1» без заданного значения.

  2. Вычислитель обратится к функции AttrValue для получения значения атрибута «123».

  3. Проверяется условие после успешного выполнения цели. Условие выполняется при найденном атрибуте «ATTR1» со значением «123».

  4. Чтение дескриптора объекта доступно для пользователя.

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

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

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

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

См. также:

IABACEngine