Дескриптор безопасности
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) (→Набор групп текущего пользователя) |
||
| Строка 15: | Строка 15: | ||
Ниде приводится пример кода, который позволяет получить строку с наименованиями всех групп, в которые входит текущий пользователь системы: | Ниде приводится пример кода, который позволяет получить строку с наименованиями всех групп, в которые входит текущий пользователь системы: | ||
| − | + | ... | |
| − | + | ||
| − | ... | + | |
dim Creator, UG, InGroups | dim Creator, UG, InGroups | ||
set Creator = new TCreator | set Creator = new TCreator | ||
| Строка 32: | Строка 30: | ||
UG.Next | UG.Next | ||
loop | loop | ||
| − | ... | + | ... |
| − | + | [[Category:База данных]] | |
Версия 11:18, 12 ноября 2009
Дескриптор безопасности -- это 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
...