Свойство Root определяет элемент, находящийся на первом уровне иерархии атрибутного доступа.
Для выполнения примера убедитесь, что в структуре атрибутного доступа содержится набор политик и на диске С находится файл обновления Update.pefx.
Добавьте ссылки на системные сборки: ABAC, Metabase, ForeSystem (для примера на Fore.NET).
Sub Main;
Var
MB: IMetabase;
MS: IMetabaseSecurity;
PolicyObject, PolicyObjectPef: IABACRootPolicyObject;
PolicySet, PolicySetPef: IABACEvaluatedObject;
Policy: IABACPolicy;
Update: IMetabaseUpdate;
AbacRulesNode: IMetabaseUpdateAbacRulesNode;
s: string;
Begin
// Получим доступ к репозиторию
MB := MetabaseClass.Active;
MS := MB.Security;
Update := Mb.CreateUpdate;
Update.LoadFromFileNF("C:\Update.pefx");
// Добавим правила атрибутного доступа в обновление
AbacRulesNode := Update.AbacRulesNode;
AbacRulesNode.Label := "Правила ABAC";
// Получим структуру атрибутного доступа
PolicyObject := MB.Security.Policy.ABACRules;
// Получим набор политик с индексом «0»
PolicySet := PolicyObject.Policies.Item(0);
// Определим элемент, находящийся на первом уровне атрибутного доступа
PolicyObjectPef := AbacRulesNode.Root;
PolicySetPef := PolicyObjectPef.FindByGuidStr(PolicySet.GuidStr);
If PolicySetPef <> Null Then
Debug.WriteLine("Набор политик уже был добавлен в обновление");
Return;
End If;
AbacRulesNode.Add(PolicySet, True);
PolicySetPef := PolicyObjectPef.FindByGuidStr(PolicySet.GuidStr);
If PolicySet <> Null Then
Debug.WriteLine("Набор политик добавлен в обновление");
Else
Debug.WriteLine("Набор политик не добавлен в обновление");
End If;
Update.SaveToFileNF("C:\Update.pefx");
End Sub Main;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.ABAC;
Imports Prognoz.Platform.Interop.Foresystem;
…
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
MS: IMetabaseSecurity;
PolicyObject, PolicyObjectPef: IABACRootPolicyObject;
PolicySet, PolicySetPef: IABACEvaluatedObject;
Policy: IABACPolicy;
Update: IMetabaseUpdate;
AbacRulesNode: IMetabaseUpdateAbacRulesNode;
s: string;
Begin
// Получим доступ к репозиторию
MB := Params.Metabase;
MS := MB.Security;
Update := MB.CreateUpdate();
Update.LoadFromFileNF("C:\" + "Update.pefx", UpdateLoadMode.ulmReplace);
// Добавим правила атрибутного доступа в обновление
AbacRulesNode := Update.AbacRulesNode;
AbacRulesNode.Label := "Правила ABAC";
// Получим структуру атрибутного доступа
PolicyObject := MB.Security.Policy.ABACRules;
// Получим набор политик с индексом «0»
PolicySet := PolicyObject.Policies.Item[0];
// Определим элемент, находящийся на первом уровне атрибутного доступа
PolicyObjectPef := AbacRulesNode.Root;
PolicySetPef := PolicyObjectPef.FindByGuidStr(PolicySet.GuidStr);
If PolicySetPef <> Null Then
System.Diagnostics.Debug.WriteLine("Набор политик уже был добавлен в обновление");
Return;
End If;
AbacRulesNode.Add(PolicySet, True);
PolicySetPef := PolicyObjectPef.FindByGuidStr(PolicySet.GuidStr);
If PolicySet <> Null Then
System.Diagnostics.Debug.WriteLine("Набор политик добавлен в обновление");
Else
System.Diagnostics.Debug.WriteLine("Набор политик не добавлен в обновление");
End If;
Update.SaveToFileNF("C:\" + "Update.pefx");
End Sub;
В результате выполнения примера в консоль будет выведено сообщение:
если набора политик не было в обновлении:
Набор политик добавлен в обновление
если набор политик был в обновлении:
Набор политик уже был добавлен в обновление
См. также: