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

Astral Man

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

При логине смотрим какие модули есть в системе, проверяем доступ и после проверки показываем пользователю что ему доступно.
 

_RVK_

Новичок
Я делал так:
Имеются модули с порядковыми номерами n=1, 2, 3...m
Каждый модуль получает номер который равняется 2^n.
Потом права пользователя вычисляются как сумма этих номеров.
Например пользователь имеет доступ к модулю 1, 3 и 8....
Поэтому права пользователя равны 2^1+2^3+2^8=266. Получить из этого числа номера модулей к которым пользователь имеет доступ дело техники.
 

Demiurg

Guest
>Перечень установленных модулей ядру знать не помешает.
это уже не модули будут а элементы ядра.
Дело тут не в названии а в том, что на мой взгляд, модули должны вести себя примерно так:
Скопировал файл/файлы/папку, прописал модуль в админской части, раздал права, и все работает. Завтра версия ядра может поменяться, и что, в ней заного все модули прописывать ?
 

Demiurg

Guest
Diesel
посмотри тоже ссылку. что ты будешь делать, когда модулей у тебя будет 100 ?
 

Demiurg

Guest
нет, ядро ничего не знает, оно только знает откуда узнать и общий интерфейс.
 

_RVK_

Новичок
Diesel
посмотри тоже ссылку. что ты будешь делать, когда модулей у тебя будет 100 ?
Это недостаток метода.
Но есть и достоинства.
Запрос к базе нужно делать единожды при авторизации, а потом хранить число в сессии.
Исчезает лишняя таблица.

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

а вообще, цитата из статьи:
Для конкретной системы нужно строить свою схему исходя из требований по быстродействию и уровню ограничения доступа.
 

Demiurg

Guest
Diesel
тебе решать конечно.
Вот еще недостаток:
про добавлении модулей или изменении прав - пользователь должен перелогинииться.
 

Astral Man

We Will Rock You
Кстати про добавление новых модулей, каждому пользователю надо добавить право..
Либо всем разрешить доступ либо нет, или при добавлении модуля сразу отмечать нужных пользователей которым нужен доступ.
 

Demiurg

Guest
Diesel
часто, не часто, но могу описать ситуацию:
Есть модуль к которому а анмина А есть доступ. А залогинелся и правит себе информацию. Тут вдруг А впадает в немилость главному админу Б, тот отнимает у А права. Но А и не думал перелогиниваться и правит себе дальше информацию.

Все это конечно мелочи, я просто перечисляю приемущества одного метода над другим.
 

Astral Man

We Will Rock You
Автор оригинала: Demiurg
Diesel
Есть модуль к которому а анмина А есть доступ. А залогинелся и правит себе информацию. Тут вдруг А впадает в немилость главному админу Б, тот отнимает у А права. Но А и не думал перелогиниваться и правит себе дальше информацию.
Значит проверять доступ нужно всегда, при входе, при сохранении инфы, и т.д.
Сколько же запросов получится? Или это нормально?
 

Demiurg

Guest
Astral Man
в ссылке, которую дал StUV, расписаны варианты структор с различными гибкостями. Diesel же хочется сказать, что при его способе повышается производительность. Но я не думаю, что ты заметишь это повышение с десятком тысячь хитов в день. А вот всевозможных проблем оберешься.
 

_RVK_

Новичок
Сколько же запросов получится? Или это нормально?
Это нормально. Просто это убивает одно из приемуществ моего метода.

Но я не думаю, что ты заметишь это повышение с десятком тысячь хитов в день.
Ты прав. Но мне кажется что мой вариант проще в реализации. Производительность тут на втором месте. Такая система используется при выборе иголки в матричном принтере :) (Оттуда я и спер идею). Думаю неспроста. Хотя на методе я не настаиваю. Просто мне он нравится.
 

Demiurg

Guest
Матричный принтер тут не причем. ОБычноя битовая логика.
В твоем случае для каждого модуля надо заводить константу:
define('MODULE_NEWS' , 0x1);
define('MODULE_FORUM' , 0x2);
define('MODULE_CHAT' , 0x4);

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

реализация тут не проще, а вот добавление новых модулей - давольно трудоемкая задача, в отличии от той, что я описывал выше. Можно конечно все автоматизировать, но реализация автоматизации тут простой не будет.
 

Astral Man

We Will Rock You
Похоже самое просто решение такое:
После того как пользователь залогинился мы знаем его id,
в каждом модуле проверка на доступ:
смотрим по id пользователя id доступных модулей и даем доступ.
 

_RVK_

Новичок
Demiurg Спорить не буду. Это просто один из вариантов который имеет право на жизнь.
 

Demiurg

Guest
Astral Man
Права доступа должен проверять не сам модуль, а ядро.
 
Сверху