ISecurityDescriptor.ApplyO

Синтаксис

ApplyO(Options: SecurityDescriptorApplyFlags);

ApplyO(Prognoz.Platform.Interop.Metabase.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" (Полный доступ).

См. также:

ISecurityDescriptor