Управление правами доступа к атрибутам

Для выполнения примера предполагается наличие репозитория НСИ с идентификатором «MDM», содержащего справочник НСИ с идентификатором «MDM_DICT». Справочник «MDM_DICT» должен содержать пользовательский атрибут с идентификатором «USERATTRIBUT».

В списке субъектов доступа платформы должны быть включены два дополнительные пользователя (помимо базового пользователя ADMIN и группы АДМИНИСТРАТОРЫ). В справочнике «MDM_DICT» для дополнительных пользователей должны быть созданы метки безопасности.

После выполнения примера в справочнике «MDM_DICT» будут изменены права доступа к атрибутам «Наименование» и «USERATTRIBUT». Права для атрибута «Наименование»: чтение - пользователь ADMIN и первый дополнительный пользователь; запись - первый и второй дополнительные пользователи. Права для атрибута «USERATTRIBUT: чтение - пользователь ADMIN и второй дополнительный пользователь; запись - второй дополнительный пользователь.

Пример Fore

Добавьте ссылки на системные сборки «Metabase», «Rds».

Sub userProc;
Var
    MB: IMetabase;
    MObj: IMetabaseObject;
    Dict: IRdsDictionary;
    Attrs: IRdsAttributes;
    Attr: IRdsAttribute;
    SecLab: ISecurityLabels;
    Admin, User1, User2: ISecuritySubject;
Begin
    MB := MetabaseClass.Active;
    
//Получаем справочник НСИ
    MObj := MB.ItemByIdNamespace("MDM_DICT", MB.ItemById("MDM").Key).Edit;
    
//Получаем список атрибутов
    Dict := MObj As IRdsDictionary;
    SecLab := MObj.SecurityDescriptor.LabelSecurity;
    
//Пользователи
    Admin := SecLab.Mapping(0); //Пользователь Admin
    User1 := SecLab.Mapping(2); //Первый дополнительный пользователь
    User2 := SecLab.Mapping(3); //Второй дополнительный пользователь
    Attrs := Dict.Attributes;
    
//Права на атрибут «Наименование»
    Attr := Attrs.Name;
    Attr.ReadAccess := SecLab.Value(Admin) + SecLab.Value(User1);
    Attr.WriteAccess := SecLab.Value(User1) + SecLab.Value(User2);
    
//Права на пользовательский атрибут «USERATTRIBUT»
    Attr := Attrs.FindById("USERATTRIBUT");
    Attr.ReadAccess := SecLab.Value(Admin) + SecLab.Value(User2);
    Attr.WriteAccess := SecLab.Value(User2);
    
//Сохраняем изменения
    MObj.Save;
End Sub userProc;

Пример Fore.NET

Imports Prognoz.Platform.Interop.Rds;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    MObj: IMetabaseObject;
    Dict: IRdsDictionary;
    Attrs: IRdsAttributes;
    Attr: IRdsAttribute;
    SecLab: ISecurityLabels;
    Admin, User1, User2: ISecuritySubject;
Begin
    MB := Params.Metabase;
    //Получаем справочник НСИ
    MObj := MB.ItemByIdNamespace["MDM_DICT", MB.ItemById["MDM"].Key].Edit();
    //Получаем список атрибутов
    Dict := MObj As IRdsDictionary;
    SecLab := MObj.SecurityDescriptor.LabelSecurity;
    //Пользователи
    Admin := SecLab.Mapping[0]; //Пользователь Admin
    User1 := SecLab.Mapping[2]; //Первый дополнительный пользователь
    User2 := SecLab.Mapping[3]; //Второй дополнительный пользователь
    Attrs := Dict.Attributes;
    //Права на атрибут «Наименование»
    Attr := Attrs.Name;
    Attr.ReadAccess := SecLab.Value[Admin] + SecLab.Value[User1];
    Attr.WriteAccess := SecLab.Value[User1] + SecLab.Value[User2];
    //Права на пользовательский атрибут «USERATTRIBUT»
    Attr := Attrs.FindById("USERATTRIBUT");
    Attr.ReadAccess := SecLab.Value[Admin] + SecLab.Value[User2];
    Attr.WriteAccess := SecLab.Value[User2];
    //Сохраняем изменения
    MObj.Save();
End Sub;

См. также:

Примеры