AccessToken: IAccessToken;
AccessToken: Prognoz.Platform.Interop.Metabase.IAccessToken;
Свойство AccessToken возвращает параметры мандатного контроля доступа для элемента.
Для изменения параметров мандатного контроля доступа элемента используйте метод IAccessElement.ApplyAccessToken.
Для выполнения примера необходимо наличие репозитория НСИ с идентификатором «MDM», содержащего табличный справочник НСИ с идентификатором «DICT». Для пользователя, выполняющего пример, должна быть выдана привилегия «Изменение метки безопасности и списка контроля доступа любого объекта». В менеджере безопасности должна быть задана одна или более категорий секретности с несколькими уровнями безопасности.
Добавьте ссылку на системные сборки: «Metabase», «Rds».
Sub MandatoryAccess;
Var
MB: IMetabase;
Object: IMetabaseObjectDescriptor;
RdsDict: IRdsDictionary;
AOS: IAccessObjectSecurity;
Iterator: IAccessElementsIterator;
Level: integer;
Element: IAccessElement;
Token: IAccessToken;
SecCat: ISecurityCategory;
SecLevel: ISecurityLevel;
Begin
MB := MetabaseClass.Active;
// Получаем табличный справочник НСИ
Object := MB.ItemByIdNamespace("DICT", MB.ItemById("MDM").Key);
RdsDict := Object.Bind As IRdsDictionary;
// Проверяем, используется ли мандатный контроль доступа
If RdsDict.HasMandatoryAccess Then
// Выводим наименование атрибута, используемого для мандатного контроля доступа
Debug.WriteLine(RdsDict.Attributes.MandatoryAccess.Id);
// Изменяем права доступа для первого элемента справочника
AOS := Object.GetSecurity;
Iterator := AOS.GetElements;
Level := Iterator.Next;
Element := Iterator.Current;
Element := Element.Edit;
Token := Element.AccessToken;
SecCat := MB.Security.Policy.MandatoryAccess.Category(0);
SecLevel := SecCat.Level(0);
Token.ClassificationLabel(SecCat) := SecLevel;
Element.ApplyAccessToken(AccessElementApplyOptions.None);
End If;
End Sub MandatoryAccess;
Результат выполнения примера: если для элементов табличного справочника НСИ используется мандатный контроль доступа, то для первого элемента справочника будет установлен первый уровень безопасности в первой категории секретности.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Rds;
…
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
Object: IMetabaseObjectDescriptor;
RdsDict: IRdsDictionary;
AOS: IAccessObjectSecurity;
Iterator: IAccessElementsIterator;
Level: integer;
Element: IAccessElement;
Token: IAccessToken;
SecCat: ISecurityCategory;
SecLevel: ISecurityLevel;
Begin
MB := Params.Metabase;
// Получаем табличный справочник НСИ
Object := MB.ItemByIdNamespace["DICT", MB.ItemById["MDM"].Key];
RdsDict := Object.Bind() As IRdsDictionary;
// Проверяем, используется ли мандатный контроль доступа
If RdsDict.HasMandatoryAccess Then
// Выводим наименование атрибута, используемого для мандатного контроля доступа
System.Diagnostics.Debug.WriteLine(RdsDict.Attributes.MandatoryAccess.Id);
// Изменяем права доступа для первого элемента справочника
AOS := Object.GetSecurity();
Iterator := AOS.GetElements();
Level := Iterator.Next();
Element := Iterator.Current;
Element := Element.Edit();
Token := Element.AccessToken;
SecCat := MB.Security.Policy.MandatoryAccess.Category[0];
SecLevel := SecCat.Level[0];
Token.ClassificationLabel[SecCat] := SecLevel;
Element.ApplyAccessToken(AccessElementApplyOptions.acelapopNone);
End If;
End Sub;
См. также: