ApplyO(Options: SecurityDescriptorApplyFlags);
Options. Элемент перечисления SecurityDescriptorApplyFlags, определяющий, каким образом будут применяться права к текущему объекту.
Метод ApplyO осуществляет выход из режима редактирования с сохранением изменений параметров безопасности объекта и определяет, будут ли применяться новые параметры безопасности для внутренних объектов и объектов, для которых установлен признак отложенной загрузки описания.
Примером внутреннего объекта является внутренняя модель, которая включена в цепочку расчета метамодели. Пример создания внутренней модели приведен в описании метода IMsCalculationChainEntries.AddExclusiveModel.
При применении прав по иерархии права на внутренние объекты и объекты, для которых установлен признак отложенной загрузки описания, не применяются.
Для выполнения примера убедитесь, что в менеджере безопасности содержится пользователь USER, в навигаторе объектов содержится объект с идентификатором «OBJECT». Объект содержит дочерние объекты, например, контейнер моделирования.
Добавьте ссылки на системные сборки: Metabase, ForeSystem (для примера на Fore.NET).
Sub UserProc;
Var
MB: IMetabase;
ObjDesc: IMetabaseObjectDescriptor;
SecDesc: ISecurityDescriptor;
AcessCL: IAccessControlList;
ACE: IAccessControlEntry;
Sec: IMetabaseSecurity;
SS: ISecuritySubject;
Sid: ISid;
Lic: Object;
Begin
MB := MetabaseClass.Active;
// Получим лицензию для возможности работы с менеджером безопасности
Lic := MB.RequestLicense(UiLicenseFeatureType.Adm);
ObjDesc := MB.ItemById("OBJECT");
SecDesc := ObjDesc.SecurityDescriptor;
Sec := MB.Security;
SS := Sec.ResolveName("USER");
Sid := SS.Sid;
SecDesc.Edit;
AcessCL := SecDesc.Acl;
ACE := AcessCL.AddAce(AceType.AccessAllowed, Sid, 131071);
SecDesc.ApplyO(SecurityDescriptorApplyFlags.ToInternal);
// Сохраним изменения
Sec.Apply;
// Освободим лицензию
Lic := Null;
End Sub UserProc;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.ForeSystem;
…
Public Shared Sub Main(Params : StartParams);
Var
MB: IMetabase;
ObjDesc: IMetabaseObjectDescriptor;
SecDesc: ISecurityDescriptor;
AcessCL: IAccessControlList;
ACE: IAccessControlEntry;
Sec: IMetabaseSecurity;
SS: ISecuritySubject;
Sid: ISid;
Lic: Object;
Begin
MB := Params.Metabase;
// Получим лицензию для возможности работы с менеджером безопасности
Lic := MB.RequestLicense(UiLicenseFeatureType.lftAdm);
ObjDesc := MB.ItemById["OBJECT"];
SecDesc := ObjDesc.SecurityDescriptor;
Sec := MB.Security;
SS := Sec.ResolveName("USER");
Sid := SS.Sid;
SecDesc.Edit();
AcessCL := SecDesc.Acl;
ACE := AcessCL.AddAce(AceType.aceAccessAllowed, Sid, 131071);
SecDesc.ApplyO(SecurityDescriptorApplyFlags.sdafToInternal);
// Сохраним изменения
Sec.Apply();
// Освободим лицензию
Lic := Null;
End Sub;
После выполнения примера в параметрах управления доступом указанного объекта и для всех дочерних объектов будет добавлен пользователь. В дополнительных параметрах безопасности ему будут назначены разрешения в соответствии с маской "131071" (Полный доступ).
См. также: