Дескриптор безопасности
Дескриптор безопасности -- это 32-х битовое целое число содержащее битовую маску групп пользователей обладающих определенным правом доступа. Если n-ый бит в дескрипторе установлен, следовательно группа пользователей с id=n обладает указанным правом.
Разграничение доступа на уровне записи
Одно из применений дескриптора безопасности -- это разграничение доступа к отдельным записям в таблице. Для этого в таблицу добавляются от одного до трех полей имеющих предопределенные названия: AVIEW, ACHAG, AFULL. Тип полей задается доменом dsecurity.
Поле AVIEW определяет какие группы имеют право на просмотр записи, ACHAG определяет множество групп имеющие право на изменение записи и, наконец, AFULL -- дескриптор безопасности полного доступа к записи (просмотр, изменение, удаление, печать, изменение прав доступа).
Набор групп текущего пользователя
Множество групп, в которые входит текущий пользователь, задается битовой маской, хранящейся в свойстве InGroup глобального объекта IBLogin.
Ниде приводится пример кода, который позволяет получить строку с наименованиями всех групп, в которые входит текущий пользователь системы:
...
dim Creator, UG, InGroups
set Creator = new TCreator
set UG = Creator.GetObject(Application, "TgdcUserGroup", "")
InGroups = ""
UG.Open
do while not UG.EOF
if ((2 ^ (UG.id - 1)) and IBLogin.InGroup) <> 0 then
if InGroups > "" then
InGroups = InGroups & ", "
end if
InGroups = InGroups & UG.FieldByName("name").AsString
end if
UG.Next
loop
...