|
su.dbms- SU.DBMS ---------------------------------------------------------------------- From : Sergey Vinogradov 2:5006/1 08 Feb 2002 11:19:10 To : "Ilya Zvyagin" Subject : Re: row-wise security --------------------------------------------------------------------------------
>Получается, что должен быть какой-то набор критериев,
>на основе которых в системе будет происходить генерация
>прав. Hо этих критериев никак не придумать. Можно конечно
>опустится до прикладного уровня - там все просто : счет-
У нас работает примерно такая модель (все хранится в таблицах БД):
Для каждого вида объектов можно определять разные права.
Права отличаются друг от друга описанием и могут быть
как стандартного типа
('Select', 'Insert', 'Update', 'Delete' - обрабатываются базовыми классам),
так и специфического (обрабатываются наследниками).
Каждое право содержит соответствующую ему строку select,
которая используется следующим образом:
если тип права - 'Select', то прицепляется к условию Where,
если 'Insert', 'Update' или 'Delete',
то select выполняется при соответствующей модификации объекта
и результат проверяется (если нет fetch, тогда говорим - 'Hет прав').
То есть, может быть много прав одного типа, отличающихся описанием и строками
select.
Разнообразие прав ограничено только человеческой фантазией и возможностями
SQL.
Затем эти права раздаются пользователям/группам
и автоматически проверяются при всех их действиях.
Если право не дано, то действие не разрешается.
Если пользователю даны несколько прав одного типа (на один вид объектов),
то проверяем все по очереди, пока не удовлетворит :)
(при 'Select' несколько строк соединяются с 'or').
Пример:
описание - 'Изменение объектов только своего подразделения'
тип права - 'Update'
строка select - 'Select 0 from Objects
inner join Employees on ( Employees.Division = Objects.Division )
inner join Users on ( Users.Employee = Employees.Id )
where Users.Name = user_name() and Objects.Id = @Id'.
При попытке изменения объекта пользователем с такими правами,
выполнится приведенная строка select с @Id = Id изменяемого объекта.
Если объект относится к тому-же подразделению, что и пользователь,
то запрос вернет значение (0) и можно продолжать сохранение объекта.
Если нет, то запрос ничего не вернет, сохранение отменяется
а пользователь получает сообщение: 'Hет прав на изменение этого объекта'.
Часто права можно проверять в интерфейсе
и блокировать/разблокировать соответствующие командные кнопки
до совершения пользователем каких-либо действий.
Sergey Vinogradov
http://sgrape.narod.ru/
--- News Xpress 2.01
* Origin: Shadow Castle (2:5006/1@fidonet)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms/1229245264275.html, оценка из 5, голосов 10
|