Acl: IAccessControlList;
Acl: Prognoz.Platform.Interop.Metabase.IAccessControlList;
Свойство Acl возвращает список контроля доступа к объекту, сохраняемый в обновлении.
Актуально при использовании дискреционного метода контроля доступа. Условия для использования свойства:
свойство IMetabaseUpdateObjectNode.UpdatePart установлено в значение ReplaceSecurityDescriptor;
задан список контроля доступа.
При соблюдении указанных условий, используя свойство Acl , можно изменить параметры контроля доступа к объекту. Измененные параметры будут сохранены в обновлении.
Параметры контроля доступа будут копироваться из исходного объекта (IMetabaseObjectDescriptor->SecurityDescriptor->Acl), если хотя бы одно из условий не выполняется.
Для выполнения примера предполагается наличие в репозитории объектов с идентификаторами «OBJ1» и «OBJ2». Добавьте ссылку на системную сборку «Metabase».
Sub UserProc;
Var
Mb: IMetabase;
Obj: IMetabaseObjectDescriptor;
Upd: IMetabaseUpdate;
Nd: IMetabaseUpdateObjectNode;
RootFolder: IMetabaseUpdateFolderNode;
ObjDesc: IMetabaseObjectDescriptor;
SecDesc: ISecurityDescriptor;
AcessCL: IAccessControlList;
Begin
Mb := MetabaseClass.Active;
ObjDesc := MB.ItemById("OBJ1");
SecDesc := ObjDesc.SecurityDescriptor;
AcessCL := SecDesc.Acl;
Upd := Mb.CreateUpdate;
RootFolder := Upd.RootFolder;
Nd := RootFolder.Add(MetabaseUpdateNodeType.Object) As IMetabaseUpdateObjectNode;
Upd.AllowReplaceSD := True;
Nd.UpdatePart := MetabaseObjectUpdatePart.ReplaceSecurityDescriptor;
Obj := Mb.ItemById("OBJ2").Bind;
Nd.Object := Obj;
Nd.Acl.Append(AcessCL);
Upd.SaveToFileNF("С:\Update.pefx");
Upd := Mb.CreateUpdate;
Upd.LoadFromFileNF("С:\Update.pefx");
Upd.Apply;
End Sub UserProc;
В процессе выполнения примера происходит установка созданного обновления. После выполнения примера дополнительные параметры безопасности объекта репозитория с идентификаторами «OBJ2» заменятся дополнительными параметрами «OBJ1».
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Metabase;
Public Shared Sub Main(Params: StartParams);
Var
Mb: IMetabase;
Obj: IMetabaseObjectDescriptor;
Upd: IMetabaseUpdate;
Nd: IMetabaseUpdateObjectNode;
RootFolder: IMetabaseUpdateFolderNode;
ObjDesc: IMetabaseObjectDescriptor;
SecDesc: ISecurityDescriptor;
AcessCL: IAccessControlList;
Begin
Mb := Params.Metabase;
ObjDesc := MB.ItemById["OBJ1"];
SecDesc := ObjDesc.SecurityDescriptor;
AcessCL := SecDesc.Acl;
Upd := Mb.CreateUpdate();
RootFolder := Upd.RootFolder;
Nd := RootFolder.Add(MetabaseUpdateNodeType.untObject) As IMetabaseUpdateObjectNode;
Upd.AllowReplaceSD := True;
Nd.UpdatePart := MetabaseObjectUpdatePart.moupReplaceSecurityDescriptor;
Obj := Mb.ItemById["OBJ2"].Bind();
Nd.Object := Obj;
Nd.Acl.Append(AcessCL);
Upd.SaveToFileNF("С:\" + "Update.pefx");
Upd := Mb.CreateUpdate();
Upd.LoadFromFileNF("С:\" + "Update.pefx", UpdateLoadMode.ulmReplace);
Upd.Apply(Null);
End Sub;
См. также: