Ядро движка. Права пользователей.

cDLEON

Онанист РНРСlub
Ядро движка. Права пользователей.

Хочется всё это дело красиво завернуть =)
Пока вот придумал такую реализацию.
Если в папке с модулем лежит файл .admin (собственно скрипт админки), то в админке прав юзверей показывается селект "разрешить вход в админку для этого модуля".
В той же папке лежит файл .rights - в котором лежит ХМЛ для описания рутовых\дочерних прав....Выводятся точно так же.
Но блин...Реализация всего этого дела - мягко скажем тяжёлая для процессора....Куча запросов к БД, куча данных и т.д.
Хотелось бы поинтерисоваться как вы работаете с правами....
Может быть стоит немного пересмотреть свой подход...
 

cDLEON

Онанист РНРСlub
Mr_Max
Сессию в данном подходе можно только как вариант для кеширования.
Даже в админке юзверей нужна целая куча операций, начиная с прохода по всем модулям и парсинга, где надо, ХМЛа, выдирания всех прав пользователя(и его группы) из БД для сапоставления и правильного показа уже включённых прав.
 
cDLEON
Вообще imho для админки права доступа в рамках определенных групп нужно выставлять железно (либо в таких вот конфигурационных файлах .php), а добавление/удаление пользователя в/из группу/ы уже средствами БД или как удобнее. Запросов минимум, и довольны все.
 

cDLEON

Онанист РНРСlub
kruglov
И сколько хитов в минуту у вашей админки?
да я не за общую нагрузку боюсь, а за то, что если количество модулей вырастет - генерация будет немного тормазиться.
mishco
Это да...Так даже проще...
Но группу новую с возможностью лазить в админку будет сделать невозможно. Или это не востребовано?
 

tf

крылья рулят
Хотелось бы поинтерисоваться как вы работаете с правами....
дерево страниц сайта (админских и морды)
для каждой страницы выставляется доступ для группы - запись чтение
 

cDLEON

Онанист РНРСlub
У меня немного другой подход. Права выставляются на целый модуль, а потом уже по ходу выполнения проверяются....
 

Marquis

Новичок
пример
таблица: action - method - GroupID - UserID
пример на модуле X и привилегии Y

action - method - GroupID - UserID
X Y 0 1

юзверь запросивший разрашение на доступ к модулю X с привилегией Y получает в результате одного sql запроса ответ true/false

у меня по этому принципу работает Интранет CRM и ништяк, полноценная система распределенного доступа.
 

dark-demon

d(^-^)b
есть форум. надо назначить пользователя Васю модератором раздела "пипец-форум" и чтобы в других разделах он имел права обычного пользователя.
как предложенные варианты справятся с поставленной задачей?
 

dark-demon

d(^-^)b
насколько я понял он по каждому чиху требует править php код, а это не слишком удобно...
ещё там довольно сильно разжёвана иерархия ролей (в коей нет особой необходимости ввиду довольно ограниченного числа ролей), но не сказано поддерживает ли он иерархию ресурсов (коих может быть оочень много).
 

AmdY

Пью пиво
Команда форума
Marquis
предложил хороший способ, главное правильно задавать action и делать выборку
Код:
ресурс                                 права  группа  пользователь
forum/id/2/action/delete/post/*/      true       0        999
 

Marquis

Новичок
AmdY
ну не совсем так
один из реальных примеров.

| request | workOnly | 0 | 1 |

система обработки заявок в суппорт.
юзверю #1 на модуль "request" выдана привилегия "workOnly" только работы над заявками.

я долго пытался понять как эффективнее выдавать привилегии на скрипты, в результате забил и сделал как есть.

-~{}~ 16.08.07 21:43:

главный плюс в этом подходе это простота добавления новых экшенов и методов, ну и соотвественно нужно уделить максимум времени на разработку "глобального" враппера.
 

cDLEON

Онанист РНРСlub
как предложенные варианты справятся с поставленной задачей?
Я, наверное, года два назад использовал свой подход...В старом-старом движке )
В ХМЛ файле прав использовал констркцию вида
PHP:
<r name="_" dynamic="1" type="sql" query="SELECT id FROM forums">
<r name="view"/>
  <r name="edit">
  <r name="del"/>
  <r name="editOther"/>
 </r>
</r>
Таким образом к имени права самого первого доплюсовывается ид форума) И проверяется всё это дело простенько.
Только вот одна проблема всё таки есть) Выделить список модераторов для какого-нибудь форума.... =)

-~{}~ 17.08.07 04:52:

AmdY
Я...Примерно такой же метод использую)
Только жаль мне мускуль если проверять целое дерево прав, то это многовато запросов понадобиться, поэтому предпочитаю извлекать ВСЕ права для конкретного пользователя)
 

AmdY

Пью пиво
Команда форума
cDLEON,зачем много запросов, join, union исправят ситуацию
---------------
действительно не правильно понял :(
 

cDLEON

Онанист РНРСlub
AmdY
Ты меня не правильно понял) Я имел ввиду если делать так:
юзверь запросивший разрашение на доступ к модулю X с привилегией Y получает в результате одного sql запроса ответ true/false
А вообще - да) Проблем особых нет)
 
Сверху