ValueStr([Subject: ISecuritySubject = Null]): String;
ValueStr[Subject: Prognoz.Platform.Interop.Metabase.ISecuritySubject]: String;
Subject. Необязательный параметр, определяющий субъект безопасности (пользователь, группа). По умолчанию - текущий пользователь.
Свойство ValueStr возвращает значение маски для субъекта безопасности, передаваемого посредством параметра Subject, в строковом виде.
Вся маска разбивается на группы по 32 бита. Данная символьная строка представляет собой последовательность десятичных чисел, каждое из которых представляет собой маску в десятичном виде, биты которой сопоставлены субъектам безопасности.
Для пользователя значение ValueStr возвращает значение маски, включающее в себе все группы, в которые входит пользователь, и для которых также сопоставлен бит маски.
Свойство актуально, если метки безопасности сопоставлены для более 32 субъектов безопасности. Если субъекту безопасности не сопоставлен ни один бит маски - возвращает 0.
Для выполнения примера предполагается наличие табличного справочника с идентификатором "Tab_Dict".
Sub UserProc;
Var
MB: IMetabase;
MDesc: IMetabaseObjectDescriptor;
Group1, User1, User2: ISecuritySubject;
SecDesc: ISecurityDescriptor;
SecLab: ISecurityLabels;
AttributeValue: IAccessAttributeValue;
Begin
MB := MetabaseClass.Active;
MDesc := MB.ItemById("Tab_Dict");
//Субъекты безопасности, которые будут добавлены в справочник
Group1 := MB.Security.ResolveName("Users");
User1 := MB.Security.ResolveName("Name1");
User2 := MB.Security.ResolveName("Name2");
SecDesc := MDesc.SecurityDescriptor;
SecDesc.Edit;
SecLab := SecDesc.LabelSecurity;
//Установка новых соответствий
SecLab.BitCount := 35;
SecLab.Mapping(32) := Group1;
SecLab.Mapping(33) := User1;
SecLab.Mapping(34) := User2;
SecDesc.Apply(False);
Debug.WriteLine("Значение маски для субъектов, включая группу в которую они входят");
Debug.WriteLine("Group1 :" + SecLab.ValueStr(Group1));
Debug.WriteLine("User1 :" + SecLab.ValueStr(User1));
Debug.WriteLine("User2 :" + SecLab.ValueStr(User2));
Debug.WriteLine("Значение маски для субъектов без групп, в которые они входят");
AttributeValue := New AccessAttributeValue.Create(SecLab.BitCount, 0);
AttributeValue.Value(32) := True;
Debug.WriteLine("Group1 :" + AttributeValue.ToString);
AttributeValue := New AccessAttributeValue.Create(SecLab.BitCount, 0);
AttributeValue.Value(33) := True;
Debug.WriteLine("User1 :" + AttributeValue.ToString);
AttributeValue := New AccessAttributeValue.Create(SecLab.BitCount, 0);
AttributeValue.Value(34) := True;
Debug.WriteLine("User2 :" + AttributeValue.ToString);
End Sub UserProc;
После выполнения примера для табличного справочника будут изменены метки безопасности. Для указанных битов маски будут сопоставлены указанные субъекты безопасности, созданные для текущего репозитория. После этого сформированные значения маски будут выведены в консоль среды разработки.
Для выполнения примера предполагается наличие табличного справочника с идентификатором "Tab_Dict".
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Rds;
Imports System;
Imports System.Diagnostics;
Public Sub UserProc(Params: StartParams);
Var
MB: IMetabase;
MDesc: IMetabaseObjectDescriptor;
Group1, User1, User2: ISecuritySubject;
SecDesc: ISecurityDescriptor;
SecLab: ISecurityLabels;
AttributeValue: AccessAttributeValue = New AccessAttributeValueClass();
Begin
MB := Params.Metabase;
MDesc := MB.ItemById["Tab_Dict"];
//Субъекты безопасности, которые будут добавлены в справочник
Group1 := MB.Security.ResolveName("Users");
User1 := MB.Security.ResolveName("Name1");
User2 := MB.Security.ResolveName("Name2");
SecDesc := MDesc.SecurityDescriptor;
SecDesc.Edit();
SecLab := SecDesc.LabelSecurity;
//Установка новых соответствий
SecLab.BitCount := 35;
SecLab.Mapping[32] := Group1;
SecLab.Mapping[33] := User1;
SecLab.Mapping[34] := User2;
SecDesc.Apply(False);
System.Diagnostics.Debug.WriteLine("Значение маски для субъектов, включая группу в которую они входят");
System.Diagnostics.Debug.WriteLine("Group1 :" + SecLab.ValueStr[Group1]);
System.Diagnostics.Debug.WriteLine("User1 :" + SecLab.ValueStr[User1]);
System.Diagnostics.Debug.WriteLine("User2 :" + SecLab.ValueStr[User2]);
System.Diagnostics.Debug.WriteLine("Значение маски для субъектов без групп, в которые они входят");
AttributeValue.Create(SecLab.BitCount, 0);
AttributeValue.Value[32] := True;
System.Diagnostics.Debug.WriteLine("Group1 :" + AttributeValue.ToString);
AttributeValue.Create(SecLab.BitCount, 0);
AttributeValue.Value[33] := True;
System.Diagnostics.Debug.WriteLine("User1 :" + AttributeValue.ToString);
AttributeValue.Create(SecLab.BitCount, 0);
AttributeValue.Value[34] := True;
System.Diagnostics.Debug.WriteLine("User2 :" + AttributeValue.ToString);
End Sub;
После выполнения примера для табличного справочника будут изменены метки безопасности. Для указанных битов маски будут сопоставлены указанные субъекты безопасности, созданные для текущего репозитория. После этого сформированные значения маски будут выведены в консоль среды разработки.
См. также: