encyclop
Guest
Система распределения прав
Приветствую!
В общем, задался я целью сделать на сайте систему распределения прав... и сделал.
Ее особенность в том, там реализовано ограничение доступа на уровне сценариев (то есть юзеру разрешается или не разрешается что-либо делать на данном сценарии относительно всех его записей).
Надо идти дальше, делать ограничение доступа на уровне записей, но тут есть несколько путей, и я в раздумьях...
Путь 1. Вносить запись, на которую передается право, в таблицу-связку права-юзеры в формате ID права | ID юзера | ID записи (у меня все ID уникальны в рамках базы, ибо пользую я PEAR:B), но чем на большее кол-во записей будет передаваться большее вол-во прав, больше будет пухнуть таблица.
И потом, как осуществлять оперативную проверку на право доступа к какому-либо айтему? Вносить все ID конкретного юзера в сессию в формате $_SESSION['rights']['righttype'] = array(id айтемов)... Это же какая сессия будет... А если юзер древний, а если таких, мягко говоря, много?
Путь 2. Пользоваться правом владельца. При создании какой-либо записи в специальную колонку текущей таблицы вносится ID пользователя, создавшего эту запись. Считается, что он может делать с ней все, что захочет.
Но как тогда быть с ситуацией, когда юзеру надо дать право работать с чужими записями? Можно, конечно, совместить путь 2 с первым...
Путь 3. Создание уровней пользователей (не групп, группы уже есть, и пользователи работают через права своей группы), то есть уровень "Пользователи" может работать только со своими записями с возможностью для представителей более высоких уровней сделать любого пользователя владельцем какой-либо группы записей (сменить владельца). "Админы" могут работать с чумижи записями по пути 1. "Суперадмины" - со всеми записями.
Есть варианты?
Приветствую!
В общем, задался я целью сделать на сайте систему распределения прав... и сделал.
Ее особенность в том, там реализовано ограничение доступа на уровне сценариев (то есть юзеру разрешается или не разрешается что-либо делать на данном сценарии относительно всех его записей).
Надо идти дальше, делать ограничение доступа на уровне записей, но тут есть несколько путей, и я в раздумьях...
Путь 1. Вносить запись, на которую передается право, в таблицу-связку права-юзеры в формате ID права | ID юзера | ID записи (у меня все ID уникальны в рамках базы, ибо пользую я PEAR:B), но чем на большее кол-во записей будет передаваться большее вол-во прав, больше будет пухнуть таблица.
И потом, как осуществлять оперативную проверку на право доступа к какому-либо айтему? Вносить все ID конкретного юзера в сессию в формате $_SESSION['rights']['righttype'] = array(id айтемов)... Это же какая сессия будет... А если юзер древний, а если таких, мягко говоря, много?
Путь 2. Пользоваться правом владельца. При создании какой-либо записи в специальную колонку текущей таблицы вносится ID пользователя, создавшего эту запись. Считается, что он может делать с ней все, что захочет.
Но как тогда быть с ситуацией, когда юзеру надо дать право работать с чужими записями? Можно, конечно, совместить путь 2 с первым...
Путь 3. Создание уровней пользователей (не групп, группы уже есть, и пользователи работают через права своей группы), то есть уровень "Пользователи" может работать только со своими записями с возможностью для представителей более высоких уровней сделать любого пользователя владельцем какой-либо группы записей (сменить владельца). "Админы" могут работать с чумижи записями по пути 1. "Суперадмины" - со всеми записями.
Есть варианты?