Форум → Программирование → PHP для идиотов → PHP и ООП → MVC ещё разок.
MVC ещё разок.
Страницы: ← Предыдущая страница →
-
-
Сен. 18, 2009, 3:28 п.п., спустя 22 часа 32 минуты 11 секунд
оформление пиздецвсе умрут, а я изумруд -
-
-
Сен. 18, 2009, 4:30 п.п., спустя 28 минут 22 секунды
phpdude, что оформлять? Кода нет, таблиц тоже. Разукрасить?!
CTAPbIu_MABP, учись читать :) -
Сен. 18, 2009, 4:39 п.п., спустя 8 минут 50 секунд
твои долбоёбские отступы ебут глаза больше чем разукрашки
phpdude, что оформлять? Кода нет, таблиц тоже. Разукрасить?!
CTAPbIu_MABP, учись читать :)все умрут, а я изумруд -
Сен. 18, 2009, 5:53 п.п., спустя 1 час 13 минут 25 секунд
Дубль два для изысканной публики …
CTAPbIu_MABP, для тебя только половина поста.
md5, phpdude, может в таком виде соизволите прочесть?
Каждый юзер коннектится к БД с своим логином/паролем.
Доступ юзера в систему определяется удачностью коннекта.
В БД на onConnect стоит триггер, который проверяет поле "user_enabled" в табл. юзеров. Если юзеру запрещен доступ в систему, то он фиг законнектится.
Система разграничения прав реализована в стиле "группы/права групп/членство юзеров в группах".
В итоге все права сводятся в одну таблицу:
[tt] permission(
username,
permission, – название "сущности безопасности" (USER_MANAGER, SYS_CONSTANT, TASK_n, и т.д. )
access – 32-битное число. Это битовая маска конкретных прав для указанной сущности)[/tt]
Этими данные пользуются базой (ХП, вьюшки, триггеры) для определения полномочий юзера.
Теперь переходим к клиенту и правам выполнения в нём действий.
Имеется табличка
[tt] mvc_controls (
sys – номер клиента (1 - http-сайт, 2-консольная утилитка, 3-десктоп-приложение_А и т.д.)
control -|
action – тут понятно
Condition – Некоторое условие, какими правами должен обладать юзер, для выполнения данного действия)
[/tt]
В каком виде описать необходимые условия в таблице mvc_controls? Словами это будет, примерно так:"Должны быть подняты биты 5,7-14 в праве USER_MANAGER и бит 4 в TASK_2, или (бит 6 в USER_MANAGER и опущены биты 5-28 в TASK_3))" и т.д.
Заморочка в том, что этой таблицей будут пользоваться различные приложения, написанные на различных языках.
Не хочется описывать биты как готовое число (подняты биты 4,5,28 - это число 548354012) - исчезает читабельность.
Вариант "(1<<4||1<<5||1<<28)" тоже не особо читабелен.
Простое условие "в праве USR должны стоять биты a,b,c" придется записать так "(USR & 1<<a||1<<b||1<<c) == 1<<a||1<<b||1<<c" – нечитабельная гадость.
Начинаю подумывать о своем языке записи, который содержит "классические" логические операции плюс удобные "макрооперации".
Есть варианты?
При постоянном разборе своего макроязыка, мы теряем в скорости работы.
Как вариант, можно ввести ещё одно поле с байт-кодом разбора выражения.
Тогда транслятор (который будет заполнять доп. поле байт-кода) можно написать на одной платформе (PHP, например), а на других языках только простой исполнитель этого байт-кода (виртуальная машина, блин, получается :-) ).
Будут интересные Ваши мысли, а не придирки к оформлению? -
Сен. 18, 2009, 6:10 п.п., спустя 17 минут 46 секунд
описывай правила доступа как RBAC. эти правила можно транслировать в более низкоуровневые, например в те, что ты описал
раздавать права в таком виде здесь показано сейчас слишком геморноιιlllιlllι унц-унц -
Сен. 18, 2009, 6:57 п.п., спустя 46 минут 8 секунд
Этими данные пользуются базой
шо?
мое видение проблемы описано вот тут
http://pyha.ru/forum/topic/274.msg7803#msg7803 -
Сен. 18, 2009, 7:23 п.п., спустя 25 минут 58 секунд
"Эти данные (содержимое табл. permission) используется БД для разграничение прав юзеров на уровне БД."
примерно так.create procedure USRPERMISSION_BUILD
as
…
declare variable FIRST_IT type of D_INTEGER;
declare variable ALL_ACCESS type of D_INTEGER;
BEGIN
execute procedure mypermission_view('USER_MANAGER',st2(0))
returning_values all_access;
– проверка права юзера на выполнение данной процедуры
if (all_access = 0 and current_user <> 'SPIDER')
then exception e_access 'компиллировать таблицу прав юзеров (permission_build)';
first_it = 1; – флаг первой итерации
all_access = 0; – начальное значение "прав нет"
…
END
CTAPbIu_MABP, там Вы описали "как определить, итоговые права юзера". Эту часть я вообще опустил и предложил итоговую таблицу permission. Вопрос состоит в том, как теперь эти права использовать?
Страницы: ← Предыдущая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!