Многоуровневый доступ...

Вся инфа о модулях лежит в таблице "mod"
|id_mod|name|mod|
id_mod - идентификатор млдуля
name - название модуля, это и название ссылки
mod - реальное имя модуля, как называется файл с модулем

При логине смотрим какие модули есть в системе, проверяем доступ и после проверки показываем пользователю что ему доступно.
 
Я делал так:
Имеются модули с порядковыми номерами n=1, 2, 3...m
Каждый модуль получает номер который равняется 2^n.
Потом права пользователя вычисляются как сумма этих номеров.
Например пользователь имеет доступ к модулю 1, 3 и 8....
Поэтому права пользователя равны 2^1+2^3+2^8=266. Получить из этого числа номера модулей к которым пользователь имеет доступ дело техники.
 
>Перечень установленных модулей ядру знать не помешает.
это уже не модули будут а элементы ядра.
Дело тут не в названии а в том, что на мой взгляд, модули должны вести себя примерно так:
Скопировал файл/файлы/папку, прописал модуль в админской части, раздал права, и все работает. Завтра версия ядра может поменяться, и что, в ней заного все модули прописывать ?
 
Diesel
посмотри тоже ссылку. что ты будешь делать, когда модулей у тебя будет 100 ?
 
нет, ядро ничего не знает, оно только знает откуда узнать и общий интерфейс.
 
Diesel
посмотри тоже ссылку. что ты будешь делать, когда модулей у тебя будет 100 ?
Это недостаток метода.
Но есть и достоинства.
Запрос к базе нужно делать единожды при авторизации, а потом хранить число в сессии.
Исчезает лишняя таблица.

Если модулей много то логично разделить их на группы, и проверять права на группу, а потом на модуль в группе.

а вообще, цитата из статьи:
Для конкретной системы нужно строить свою схему исходя из требований по быстродействию и уровню ограничения доступа.
 
Diesel
тебе решать конечно.
Вот еще недостаток:
про добавлении модулей или изменении прав - пользователь должен перелогинииться.
 
Кстати про добавление новых модулей, каждому пользователю надо добавить право..
Либо всем разрешить доступ либо нет, или при добавлении модуля сразу отмечать нужных пользователей которым нужен доступ.
 
Diesel
часто, не часто, но могу описать ситуацию:
Есть модуль к которому а анмина А есть доступ. А залогинелся и правит себе информацию. Тут вдруг А впадает в немилость главному админу Б, тот отнимает у А права. Но А и не думал перелогиниваться и правит себе дальше информацию.

Все это конечно мелочи, я просто перечисляю приемущества одного метода над другим.
 
Автор оригинала: Demiurg
Diesel
Есть модуль к которому а анмина А есть доступ. А залогинелся и правит себе информацию. Тут вдруг А впадает в немилость главному админу Б, тот отнимает у А права. Но А и не думал перелогиниваться и правит себе дальше информацию.
Значит проверять доступ нужно всегда, при входе, при сохранении инфы, и т.д.
Сколько же запросов получится? Или это нормально?
 
Astral Man
в ссылке, которую дал StUV, расписаны варианты структор с различными гибкостями. Diesel же хочется сказать, что при его способе повышается производительность. Но я не думаю, что ты заметишь это повышение с десятком тысячь хитов в день. А вот всевозможных проблем оберешься.
 
Сколько же запросов получится? Или это нормально?
Это нормально. Просто это убивает одно из приемуществ моего метода.

Но я не думаю, что ты заметишь это повышение с десятком тысячь хитов в день.
Ты прав. Но мне кажется что мой вариант проще в реализации. Производительность тут на втором месте. Такая система используется при выборе иголки в матричном принтере :) (Оттуда я и спер идею). Думаю неспроста. Хотя на методе я не настаиваю. Просто мне он нравится.
 
Матричный принтер тут не причем. ОБычноя битовая логика.
В твоем случае для каждого модуля надо заводить константу:
define('MODULE_NEWS' , 0x1);
define('MODULE_FORUM' , 0x2);
define('MODULE_CHAT' , 0x4);

и тд. потом проверка будет примерно такой:
if($access & MODULE_NEWS) ...

реализация тут не проще, а вот добавление новых модулей - давольно трудоемкая задача, в отличии от той, что я описывал выше. Можно конечно все автоматизировать, но реализация автоматизации тут простой не будет.
 
Похоже самое просто решение такое:
После того как пользователь залогинился мы знаем его id,
в каждом модуле проверка на доступ:
смотрим по id пользователя id доступных модулей и даем доступ.
 
Demiurg Спорить не буду. Это просто один из вариантов который имеет право на жизнь.
 
Astral Man
Права доступа должен проверять не сам модуль, а ядро.
 
Сверху