права на объекты

Marquis

Новичок
права на объекты

Есть задача:
Написать систему распределения прав на объекты, функционал должен быть полность самодостаточным (т.е. не зависеть от имеющихся данных).
На деле все выглядим следующим образом:
таблица в БД
|module_id|object_id|user_id|privilege_id|

module_id - Id модулей (например Новости это модуль #1)
object_id - Id записи (например из таблицы news)
user_id - Id юзвера
privilege_id - Id привилегии (например полный доступ - Id 3)

таким образом для того что бы дать юзеру # 1 полный доступ к модулю новости и конкретно к новости # 1 нужно добавить в таблицу строку:

|module_id|object_id|user_id|privilege_id|
| 1 | 1 | 1 | 3 |

Единственное что не нравится в моей схеме так это то, что в таблице нужно будет хранить большую часть индетификаторов из таких таблиц как каталог (товары + разделы), новости.
Таким образом таблица будет хранить не реальное количесво записей.

Вопрос.
Возможно ли как то подправить мой алгоритм дабы особо не захломлять таблицу с правами на объекты?
 

Popoff

popoff.donetsk.ua
Единственное что не нравится в моей схеме так это то, что в таблице нужно будет хранить большую часть индетификаторов из таких таблиц как каталог (товары + разделы), новости.
Таким образом таблица будет хранить не реальное количесво записей.
А что в этом плохого?
 

Marquis

Новичок
Popoff
Плохо то, что имея предположим ~50.000 товаров в каталоге и ~7 юзверов я получаю 350.000 записей в таблице (для каждого пользователя я выставил права на каждый товар, это для примера) если учесть количесво каталогов, новостей, статей и т.д то минимальный размер таблицы это порядка ~10kk записей, вот и думаю что где то не домыслил алгоритм.

-~{}~ 31.08.06 22:11:

Popoff
Можно ли в двух словах узнать как распределяются и хранятся права в системе popoff.donetsk.ua/light ? :)
 

Popoff

popoff.donetsk.ua
Запросто :)
http://popoff.donetsk.ua/text/work/libs/passport/privilege/admin.html

Насчёт объёма - это если все везде имеют доступ. А если не имеют?

-~{}~ 31.08.06 22:46:

Вообще, любая система привилегий предназначена для того, чтобы администраторы вручную выставляли привилегии. Если права назначаются не администраторами, а как-то ещё (например, роботами или автоматически), то это будет уже не система управления привилегиями, а что-то другое.

Ты говоришь о ручном назначении прав или об автоматическом назначении прав?
 

Marquis

Новичок
Popoff
Ручная установка прав юзерам Администратором системы.
Автоматическая выдача прав правдо тоже имеется, например выдача "полного контроля над объектом" после добавления юзером нового объекта.
 

Popoff

popoff.donetsk.ua
Marquis
Ты собираешься ~10kk привилегий выдать вручную?
Мне кажется или ты что-то путаешь.

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

Skubent

Новичок
Добавь на всякий случай что-то вроде object_type, мало ли окажется, что раздавать права надо будет раздавать больше, чем на один тип объектов (новости и товары, к примеру) - соответственно id не будет однозначно определять объект.
 

Marquis

Новичок
Skubent
Для этого у меня в таблице есть филды:
module_id - показывает Id модуля (например "товары")
object_id - Id объекта из модуля указанного в module_id
 

AndreyKl

Новичок
1) Нужно определиься, что чаще бывает "запретить" или "разрешить", и, если разрешить, то делать: "то что явно не запрещено, разрешено" иначе наоборот...
2) Добывить типы объектов -- например, пользователю разрешён доступ к картинкам, а объект - картинка, значит пользователь имеет доступ к картинкам.

это уменьшит объём базы в несколько раз.. хотя и 1k выставить руками -- тяжеловато.

-~{}~ 02.09.06 15:38:

3) да, ну и владельцу можно, для простоты разрешить полный доступ..

-~{}~ 02.09.06 15:40:

2)Добывить типы объектов -- например, пользователю разрешён доступ к картинкам, а объект - картинка, значит пользователь имеет доступ к картинке, если доступ не запрещён явно. (или наоборот)
 
Сверху