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 создает атрибут доступа.
Для выполнения примера в схеме должен существовать репозиторий НСИ с идентификатором «RDS» и справочник НСИ с идентификатором «Dict_1». Для справочника НСИ в списке субъектов доступа должны присутствовать 4 пользователя/группы.
Sub UserProc;
Var
MB : IMetabase;
Object : IMetabaseObjectDescriptor;
AOS : IAccessObjectSecurity;
Iterator : IAccessElementsIterator;
level : integer;
element : IAccessElement;
AttributeValue : IAccessAttributeValue;
Begin
MB := MetabaseClass.Active;
Object := MB.ItemByIdNamespace("Dict_1", MB.ItemById("RDS").Key);
AOS := Object.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.
См. также: