ФорумПрограммированиеPHP для идиотовPHP и ООП → MVC ещё разок.

MVC ещё разок.

  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 18 сентября 2009 г. 8:56, спустя 16 минут 20 секунд

    Такнамногокрасивей.Иестьчтообсудить.
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 18 сентября 2009 г. 7:28, спустя 22 часа 32 минуты 11 секунд

    оформление пиздец
    все умрут, а я изумруд
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 18 сентября 2009 г. 7:40, спустя 12 минут 36 секунд


    оформление пиздец
    +1
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 18 сентября 2009 г. 8:02, спустя 21 минуту 41 секунду

    не смог прочесть
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 18 сентября 2009 г. 8:30, спустя 28 минут 22 секунды

    phpdude, что оформлять? Кода нет, таблиц тоже. Разукрасить?!
    CTAPbIu_MABP, учись читать :)
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 18 сентября 2009 г. 8:39, спустя 8 минут 50 секунд


    phpdude, что оформлять? Кода нет, таблиц тоже. Разукрасить?!
    CTAPbIu_MABP, учись читать :)
    твои долбоёбские отступы ебут глаза больше чем разукрашки
    все умрут, а я изумруд
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 18 сентября 2009 г. 9: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, например), а на других языках только простой исполнитель этого байт-кода (виртуальная машина, блин, получается :-) ).

    Будут интересные Ваши мысли, а не придирки к оформлению?
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 18 сентября 2009 г. 10:10, спустя 17 минут 46 секунд

    описывай правила доступа как RBAC. эти правила можно транслировать в более низкоуровневые, например в те, что ты описал
    раздавать права в таком виде здесь показано сейчас слишком геморно
    ιιlllιlllι унц-унц
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 18 сентября 2009 г. 10:57, спустя 46 минут 8 секунд

    Этими данные пользуются базой

    шо?

    мое видение проблемы описано вот тут
    http://pyha.ru/forum/topic/274.msg7803#msg7803
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 18 сентября 2009 г. 11: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. Вопрос состоит в том, как теперь эти права использовать?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!