Механизм работы данного метода представлен в подразделе «Настройка дискреционного метода».
Дискреционный метод используется в репозиториях по умолчанию. Для включения/выключения использования дискреционного доступа используйте флаг 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;
Для настройки прав доступа к объекту выполните следующие действия:
Используя свойства и методы интерфейса IMetabaseSecurity, получите субъект безопасности, для которого будут настраиваться права доступа к объекту.
Для объекта репозитория, используя свойство IMetabaseObjectDescriptor.SecurityDescriptor, получите параметры управления доступом. С помощью метода Edit переведите параметры в режим редактирования.
Получите список дополнительных параметров безопасности, используя свойство ISecurityDescriptor.Acl.
С помощью метода IAccessControlList.AddAce добавьте элементы безопасности, которые будут разрешать или запрещать пользователю производить определённые операции над объектом. Список базовых операций доступен в перечислении MetabaseObjectPredefinedRights. Если над объектом могут производиться специфические операции, например работа с формулами, элементами справочников и другие, то список этих операций можно получить, используя дополнительные перечисления. Список перечислений представлен в описании метода IAccessControlList.AddAce.
Примените изменения с помощью метода 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, но будет запрещено изменение прав и удаление этого объекта.
См. также: