Команда SelectSecSubject

Назначение

Вызов стандартного диалога выбора субъектов безопасности.

Параметры использования

Параметры команды передаются в свойстве Data. Для работы команды в данном свойстве необходимо указать массив типа Variant, элементы которого содержат следующие значения:

Тип значения Описание
Элемент 1: IMetabaseSecurity Менеджер безопасности репозитория, посредством которого будет строится список субъектов безопасности.
Элемент 2: SecuritySubjectType Тип субъектов безопасности, которые будут доступны для выбора в диалоге.
Элемент 3: SecuritySubjectLocation Вариант размещения субъектов безопасности, которые будут доступны для выбора.

Особенности применения

После выполнения метода Execute, при корректном списке субъектов безопасности в диалоге и при нажатии кнопки "ОК", метод вернет массив. В каждом элементе массива будет содержаться один выбранный субъект безопасности.

Пример

Для выполнения примера предполагается наличие формы, расположенной на ней кнопки с наименованием "Button1". В репозитории имеется табличный справочник с идентификатором "Dim_1". Метки безопасности справочника сопоставлены двум субъектам по умолчанию (Пользователь Admin и группа Администраторы). В диалоге предполагается выбор менее 32 субъектов безопасности.

Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var
    MB: IMetabase;
    Sec: IMetabaseSecurity;
    Target: IUiCommandTarget;
    Context: IUiCommandExecutionContext;
    Params: Array[0..2];
    SubType: SecuritySubjectType;
    SubLoc: SecuritySubjectLocation;
    SS: ISecuritySubject;
    Res: Variant;
    v: Array;
    i, j: Integer;
    MDesc: IMetabaseObjectDescriptor;
    SecDesc: ISecurityDescriptor;
    SecLab: ISecurityLabels;
Begin
    MB := MetabaseClass.Active;
    Target := WinApplication.Instance.GetPluginTarget("Std");
    Context := Target.CreateExecutionContext;
    Sec := MB.Security;
    SubType := SecuritySubjectType.User;
    SubLoc := SecuritySubjectLocation.DbUsers;
    //Указываем параметры для диалога
    Params[0] := Sec;
    Params[1] := SubType;
    Params[2] := SubLoc;
    Context.Data := Params;
    //Инициализация диалога
    Res := Target.Execute("SelectSecSubject", Context);
    //Если ОК - сопоставляем свободным меткам безопасности
    If Not Res.IsNull Then
        MDesc := MB.ItemById("Dim_1");
        SecDesc := MDesc.SecurityDescriptor;
        SecDesc.Edit;
        SecLab := SecDesc.LabelSecurity;
    v := Res As Array;
    For i := 0 To SecLab.BitCount - 1 Do
        If SecLab.Mapping(i) = Null Then
                SS := v[j] As ISecuritySubject;
                SecLab.Mapping(i) := SS;
                j := j + 1;
            End If;
            If j >= v.Length Then
                Break;
            End If;
        End For;
        SecDesc.Apply(False);
    End If;
End Sub Button1OnClick;

После выполнения примера при нажатии на кнопку будет инициализирован диалог выбора субъектов безопасности. В диалоге будет доступен выбор пользователей, созданных в рамках текущего репозитория. После выбора пользователей и нажатия кнопки "ОК", данные субъекты безопасности будут сопоставлены свободным меткам безопасности справочника.

См. также:

IUiCommandTarget.Execute