Система распределения прав

encyclop

Guest
Система распределения прав

Приветствую!

В общем, задался я целью сделать на сайте систему распределения прав... и сделал.

Ее особенность в том, там реализовано ограничение доступа на уровне сценариев (то есть юзеру разрешается или не разрешается что-либо делать на данном сценарии относительно всех его записей).

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

Путь 1. Вносить запись, на которую передается право, в таблицу-связку права-юзеры в формате ID права | ID юзера | ID записи (у меня все ID уникальны в рамках базы, ибо пользую я PEAR::DB), но чем на большее кол-во записей будет передаваться большее вол-во прав, больше будет пухнуть таблица.

И потом, как осуществлять оперативную проверку на право доступа к какому-либо айтему? Вносить все ID конкретного юзера в сессию в формате $_SESSION['rights']['righttype'] = array(id айтемов)... Это же какая сессия будет... А если юзер древний, а если таких, мягко говоря, много?

Путь 2. Пользоваться правом владельца. При создании какой-либо записи в специальную колонку текущей таблицы вносится ID пользователя, создавшего эту запись. Считается, что он может делать с ней все, что захочет.

Но как тогда быть с ситуацией, когда юзеру надо дать право работать с чужими записями? Можно, конечно, совместить путь 2 с первым...

Путь 3. Создание уровней пользователей (не групп, группы уже есть, и пользователи работают через права своей группы), то есть уровень "Пользователи" может работать только со своими записями с возможностью для представителей более высоких уровней сделать любого пользователя владельцем какой-либо группы записей (сменить владельца). "Админы" могут работать с чумижи записями по пути 1. "Суперадмины" - со всеми записями.

Есть варианты?
 

crocodile2u

http://vbolshov.org.ru
А поискать? тема распределения прав доступа поднимается на этом форуме время от времени.

ЗЫ: кроме того, мне непонятна вот эта фраза: у меня все ID уникальны в рамках базы, ибо пользую я PEAR:dB. Каким образом использование PEAR:dB помогает тебе добиться уникальности ID ?
 

SiMM

Новичок
Есть вариант - воспользоваться наконец поиском по форуму. Тема неоднократно обсуждалась.
 

encyclop

Guest
Каким образом использование PEAR:dB помогает тебе добиться уникальности ID ?

Простым. Это особенность этого пакета. Существует специальная таблица c номером nextid (если ее нет, PEAR::DB сама ее создает).

При каждом инсерте делаешь запрос к этой таблице
$nextid = $this->db->nextId (tablename, true);

И этот $nextid используешь в инсерте.

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

Например, PEAR::DB позволяет c кол-вом минимальных телодвижений перейти с одной СУБД на другую.

При доступе к базе через PEAR используется так называемый DSN
$dsn="$TypeSQL://$User:$Password@$Host/$Dbase";

Так вот $TypeSQL - это тип SQL, то есть, например,
$TypeSQL= "mysql";

Но не обязательно "mysql"...

// См.: http://pear.sourceforge.net/manual/core.db.tut_dsn.php

А, вообще, тема не об этом...

++++++++++++++++++++++++++++++++++++++++++++++

Есть вариант - воспользоваться наконец поиском по форуму. Тема неоднократно обсуждалась.

Поискал, но ничего дельного (пока) не нашел.

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

Так вот конкретных практических идей на этом форуме я пока не нашел... Ну ничего, я только начал искать... (кстати, еще до вашего совета).
 

crocodile2u

http://vbolshov.org.ru
Спасибо за подробное описание некоторых моментов, связанных с этим пакетом pear. Но не мешает таки понять, что никакая "таблица nextid, являющаяся особенностью этотго пакета", не обеспечивает уникальность ID. А обеспечивается эта самая уникальность не пакетом pear, а средствами базы данных. Если ты целиком и полностью полагаешься в этом на PEAR::dB, то зря...
 

encyclop

Guest
Если ты целиком и полностью полагаешься в этом на PEAR::dB, то зря...

ТЫ что, за лоха меня держишь? Обижаешь...

Объяснять очевидное не буду. Умному достаточно.

Лучше по теме что-то дельное напиши.
 
Сверху