Перечесление админов в таблице или через разделители?

Духовность™

Продвинутый новичок
Перечесление админов в таблице или через разделители?

Привет.

Пишу систему, в которой есть кроме реализации прав на действия, ещё и права на конкретные записи и сущности.

Поясню.

Необходимо, например, суперадмину создать новостную ленту, и дать на неё права только определенным админам. При создании ленты будет либо мультиселект, либо чекбоксы напротив каждого из администраторов. Суперадмин, создающий новостную ленту, указывает, какие из существующих кроме него администраторов могут также работать с этой лентой.

У меня проблема стоит в хранении прав для администраторов. Если я храню их в классическом варианте

ид админа | его право

то при создании ещё одного администратора нужно делать в этой таблице ещё одну запись. Т.е. следить за тем, что бы в таблице связи всегда были записи, относящиеся к существующим в системе администраторам. А таблиц связи будет очень много - не только на ленты, но и на содержимое этих лент!

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

Помогите пож. определиться.
Спасибо.
 

TutanXamoN

Новичок
Я подумал, что если хранить ид админов не в классическом варианте, а через разделители
Говорю сразу идея тупиковая -любое изменение повлечёт за собой переработку структуры базы.
А собственно ответ содержиться в вопросе - у тебя есть суперпользователь и есть остальные иногда схожие.

Прекращайте мыслить пользователями - мыслите ролями ©
 

Апокалипсис

тех дир matras.ru
triumvirat
посмотри как сделано это в форумных движках.
IPB, VB
Как раз что тебе и нужно раз нужны расширенные права.
 

TutanXamoN

Новичок
Не надо к ним ползти их нужно делать.
В любом случае они потребуються.
Очень сильно повезёт если роли удасться включить в текущую систему привилегий/проверки_привилегий скорее всего ето потребует оч большого геммороя как в структуре базы так и в скриптовой части.
ИМХО даже если изначально не рассматриваеьтся необходимость ролей их нужно делать - рано или поздно они всплывут и если всплывут поздно то работы придёться делать очень много.


ЗЫ: ну почему все считают роли чем-то сложным и непонятным - работы на час отсилы а гемороя в 10 раз меньше
 

Духовность™

Продвинутый новичок
Вот смотрите, в чем загвоздка. Имеем скажем таблицу прав на ленты новостей.

id_tape | id_admin | rule
-------------------------------
1 | 23 | 1 |
2 | 23 | 0 |
3 | 23 | 1 |
1 | 66 | 0 |
2 | 66 | 1 |
3 | 66 | 0 |

Т.е. тут есть два админа с ид 23 и 66
У них у всех есть какие-то права на ленты с ид 1, 2 и 3

Допустим, я добавляю ещё одну ленту - ЧТО МНЕ ДЕЛАТЬ С БАЗОЙ? Брать всех имеющихся админов и забивать их в таблицу с правом = 0?

А если я добавляю админа - ЧТО В ЭТОМ СЛУЧАЕ ДЕЛАТЬ? Брать все имеющиеся ленты и делать новые записи с ид нового админа?

Так что ли?

-~{}~ 22.12.07 15:52:

TutanXamoN
я с ум а сойду переделывать все, что написал ((

-~{}~ 22.12.07 15:54:

Стоп. Что такое роли?

Роли - это я делаю одну запись, в которой указываю, на что она имеет право, а потом эти роли даю админам? Так что ли?
 

TutanXamoN

Новичок
А если я добавляю админа - ЧТО В ЭТОМ СЛУЧАЕ ДЕЛАТЬ? Брать все имеющиеся ленты и делать новые записи с ид нового админа?
В етом случае тебя спасут роли - ты делаешь админу роль рид_онли и ДЛЯ конкретной ленты даешь в твоей таблице права на ИЗМЕНЕНИЕ и УДАЛЕНИЕ

-~{}~ 22.12.07 14:56:

Да абсолютно прально
 

cDLEON

Онанист РНРСlub
Ну почему тупиковая...При грамотной реализации можно сделать норм. Жалко старого сайта у меня нет. Там хоть и реализовано криво в плане быстродействия, но в плане работы с правами самое то)

Права для каждого модуля хранится в папке с модулем в виде ХМЛ, в админке этот файл парсится и выстраивается дерево.
В админке групп, можно создать группу с уникальными правами, в админке пользователей можно отключить\включить некоторые права для данной группы...Помоему очень удобно
 

Духовность™

Продвинутый новичок
TutanXamoN
Кажется, я начинаю догонять что есть роли...

Хорошо. Как должна выглядеть таблица ролей для моего примера? Суперадмин создает роль для новостной ленты. В ней указывается, что её владелец имеет право работать с определенными лентами, с ид 1,2,3. Фактически, эта запись в таблице:

таблица_роли_для_ленты
----------------------------------
id_роли | ...............


дальше не пойму - что хранить дальше? Подозреваю, что id из таблицы соответствий

таблица_соответствий
------------------------------
id | id_ленты | право


Так??
 

TutanXamoN

Новичок
Простой пример:
ИД_Роли | Права для етой роли (таблица ролей)


Админ | Роль (таблица пользователей)

Ид ленты | Ид админа | Право (таблица доп прав)

Простой пример тебе нужно сделать админа который будет редактировать одну ленту из 100 есть роль ридонли ты даешь её админу а в таблице доп прав даешь права на конкретную ленту.
 

vovanium

Новичок
triumvirat
Брать всех имеющихся админов и забивать их в таблицу с правом = 0?
А зачем, их туда забивать? Если право не найдено в таблице значит оно равно 0. Записывай в таблицу только ненулевые права и всё будет нормально.
 

Pigmeich

Новичок
triumvirat
Кстати есть еще прикольный юниховский метод:

У файла есть владелец и группа-владелец.

И есть права на чтения, записи и исполнения для каждой из трех групп: владелец, группа-владелец, остальные.

Суперпользователь может все.
 
Сверху