Для выполнения примера предполагается наличие репозитория НСИ с идентификатором «MDM», содержащего справочник НСИ с идентификатором «MDM_DICT». Справочник «MDM_DICT» должен содержать пользовательский атрибут с идентификатором «USERATTRIBUT».
В списке субъектов доступа платформы должны быть включены два дополнительные пользователя (помимо базового пользователя ADMIN и группы АДМИНИСТРАТОРЫ). В справочнике «MDM_DICT» для дополнительных пользователей должны быть созданы метки безопасности.
После выполнения примера в справочнике «MDM_DICT» будут изменены права доступа к атрибутам «Наименование» и «USERATTRIBUT». Права для атрибута «Наименование»: чтение - пользователь ADMIN и первый дополнительный пользователь; запись - первый и второй дополнительные пользователи. Права для атрибута «USERATTRIBUT: чтение - пользователь ADMIN и второй дополнительный пользователь; запись - второй дополнительный пользователь.
Добавьте ссылки на системные сборки «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;
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;
См. также: