Metabase: 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;
В результате выполнения примера для вычисления доступа на чтение объекта будет использоваться отдельно заданная структура атрибутного доступа.
В консоль будет выведен результат доступа:
Пользователь: ADMIN
Объект: Системные объекты
Доступ разрешен
См. также: