Create(BitCount: Integer; Value: Variant);
BitCount - количество субъектов доступа, для которых могут быть определены права;
Value - маска доступа. Значение маски задается 4-x байтовым двоичным числом. Каждый символ двоичного числа определяет разрешение на соответствующее действие определенному субъекту безопасности:
0 - действие запрещено;
1 - действие разрешено.
Номер бита соответствует порядку следования субъектов в списке на вкладке «Субъекты доступа», если нумерацию начинать с нуля. Нумерация приведена справа налево.
Значение маски | ... 1 1 1 0 1 1 0 |
Порядок следования субъектов в списке | ... 7 6 5 4 3 2 1 |
Значение маски, приведенной к десятичному виду | 118 |
Маска может быть задана в числовом и символьном виде. Для задания в числовом виде двоичное число должно быть приведено к десятичному виду. Для задания в символьном виде вся маска разбивается на группы по 32 бита, затем каждая группа преобразовывается к десятичному числу. К каждому полученному десятичному числу должны быть добавлены пробелы, таким образом, чтобы получилось 12 символов. Из полученных подстрок составляется полная строка. Рассмотрим следующий пример. Значение маски в двоичном виде (34 бита): 1010101010101010101010101010101010. Для задания в строковом виде необходимо разбить строку на группы: 10101010101010101010101010101010 и 10. Каждую группу приводим к десятичному виду: 2863311530 и 2. Затем дополняем группы пробелами: "2863311530 " и "2 ". Значение строки, которое должно быть передано параметру Value: "2863311530 2 ".
Метод Create создает атрибут доступа.
Для выполнения примера в репозитории предполагается наличие справочника НСИ с идентификатором DICT_1. Для справочника НСИ в списке субъектов доступа должны присутствовать 4 пользователя/группы.
Sub UserProc;
Var
MB: IMetabase;
MDesc: IMetabaseObjectDescriptor;
AOS: IAccessObjectSecurity;
Iterator: IAccessElementsIterator;
Level: integer;
Element: IAccessElement;
AttributeValue: IAccessAttributeValue;
Begin
MB := MetabaseClass.Active;
MDesc := MB.ItemById("DICT_1");
AOS := MDesc.GetSecurity;
Iterator := AOS.GetElements;
Level := Iterator.Next;
Element := Iterator.Current;
Element := Element.Edit;
AttributeValue := New AccessAttributeValue.Create(32, "12 "); // значение маски задано в строковом виде
Element.AttributeAccess(AccessElementAttributes.Read) := AttributeValue;
Element.Apply(AccessElementApplyOptions.ByHierarhy Or AccessElementApplyOptions.ByLevel);
End Sub UserProc;
После выполнения примера будут изменены права доступа на чтение для первого элемента, всех его дочерних и для элементов, расположенных на одном уровне с первым. Для первых двух субъектов безопасности доступ к данным элементам будет запрещён. Задание маски в числовом виде приведено в примере для IAccessElement.Apply.
См. также: