Дискреционный метод

Механизм работы данного метода представлен в подразделе «Настройка дискреционного метода».

Дискреционный метод используется в репозиториях по умолчанию. Для включения/выключения использования дискреционного доступа используйте флаг IMetabasePolicy.DiscretionaryAccessControl.

Sub EnableDiscrAccessControl;
Var
    Mb: IMetabase;
    MbSec: IMetabaseSecurity;
    Lic: Object;
Begin
    Mb := MetabaseClass.Active;
    // Получение лицензии для возможности работы с менеджером безопасности
    Lic := Mb.RequestLicense(UiLicenseFeatureType.Adm);
    // Менеджер безопасности
    MbSec := Mb.Security;
    // Использовать дискреционный метод
    MbSec.Policy.DiscretionaryAccessControl := True;
    // Применить изменения
    MbSec.Apply;
    // Освобождение лицензии
    Lic := Null;
End Sub EnableDiscrAccessControl;

Для настройки прав доступа к объекту выполните следующие действия:

  1. Используя свойства и методы интерфейса IMetabaseSecurity, получите субъект безопасности, для которого будут настраиваться права доступа к объекту.

  2. Для объекта репозитория, используя свойство IMetabaseObjectDescriptor.SecurityDescriptor, получите параметры управления доступом. С помощью метода Edit переведите параметры в режим редактирования.

  3. Получите список дополнительных параметров безопасности, используя свойство ISecurityDescriptor.Acl.

  4. С помощью метода IAccessControlList.AddAce добавьте элементы безопасности, которые будут разрешать или запрещать пользователю производить определённые операции над объектом. Список базовых операций доступен в перечислении MetabaseObjectPredefinedRights. Если над объектом могут производиться специфические операции, например работа с формулами, элементами справочников и другие, то список этих операций можно получить, используя дополнительные перечисления. Список перечислений представлен в описании метода IAccessControlList.AddAce.

  5. Примените изменения с помощью метода ISecurityDescriptor.Apply или ISecurityDescriptor.ApplyO.

Установленные разрешения/запреты вступают в силу сразу после обновление содержимого репозитория с помощью метода IMetabase.Refresh.

Sub DiscretionaryAccessControl;
Var
    Mb: IMetabase;
    ObjDesc: IMetabaseObjectDescriptor;
    SecDesc: ISecurityDescriptor;
    AcessCL: IAccessControlList;
    Subject: ISecuritySubject;
    Lic: Object;
Begin
    Mb := MetabaseClass.Active;
    // Получим лицензию для возможности работы с менеджером безопасности
    Lic := Mb.RequestLicense(UiLicenseFeatureType.Adm);
    // Получим пользователя, для которого будут настраиваться права
    Subject := Mb.Security.ResolveName("USER");
    // Получим объект, для которого настраиваются права доступа
    ObjDesc := Mb.IteMbyId("REPORT");
    SecDesc := ObjDesc.SecurityDescriptor;
    SecDesc.Edit;
    // Дополнительные параметры безопасности
    AcessCL := SecDesc.Acl;
    // Установка разрешений
    AcessCL.AddAce(AceType.AccessAllowed, Subject.Sid, MetabaseObjectPredefinedRights.Read Or MetabaseObjectPredefinedRights.Write);
    // Установка запретов
    AcessCL.AddAce(AceType.AccessDenied, Subject.Sid, MetabaseObjectPredefinedRights.Delete Or MetabaseObjectPredefinedRights.Access);
    SecDesc.Apply(True);
    // Освободим лицензию
    Lic := Null;
End Sub DiscretionaryAccessControl;

При выполнении примера пользователю USER будет разрешено чтение и изменение объекта репозитория REPORT, но будет запрещено изменение прав и удаление этого объекта.

См. также:

Методы разграничения доступа