|
|
|
Построить модель данных для системы прав доступа
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть 3 сущности: 1. Роль. 2. Объект доступа. 3. Подгруппы доступа. Каждой роли можно назначить маску прав (int-число) на объект доступа. Каждой роли можно назначить маску прав на подгруппу доступа. При этом нужно отразить, что объекты и подгруппы связаны отношением один-ко-многим (в одном объекте может быть несколько подгрупп). Например: Роль "Менеджер по продажам" имеет маску "RW" на объект "Товары". Роль "Менеджер по продажам" имеет маску "RWU" на подобъект "Телевизоры" и маску "R" на подобъект "Кониционеры". При этом объект "Товары" является родительским по-отношению к подобъектам "Телевизоры" и "Кондиционеры". Как отразить в модели данных отношения объектов с подобъектами и, одновременно, назначение масок прав для роли на эти объекты и подгруппы? Вот что у меня получилось: [img=] Есть ли способ оптимизировать эту схему, или все и так идеально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 17:02 |
|
||
|
Построить модель данных для системы прав доступа
|
|||
|---|---|---|---|
|
#18+
* "подобъекты" = "подгруппы" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 17:03 |
|
||
|
Построить модель данных для системы прав доступа
|
|||
|---|---|---|---|
|
#18+
svnvlad, а еще есть группы юзеров - по интересам, по производственным функция, по уровню могущества... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 17:10 |
|
||
|
Построить модель данных для системы прав доступа
|
|||
|---|---|---|---|
|
#18+
spsvnvlad, а еще есть группы юзеров - по интересам, по производственным функция, по уровню могущества... Это другое. Я присваиваю юзерам набор ролей, большего не требуется в данном случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 17:14 |
|
||
|
Построить модель данных для системы прав доступа
|
|||
|---|---|---|---|
|
#18+
Здесь вопрос в том, что Идентификатор объекта - это короткая строка, типа "Price", "Valutes" и т.д. Если убрать description и совсем избавиться от таблицы object, а маску присваивать сразу в таблице role_object. Аналогично избавиться от таблицы group, маску присваивать в таблице role_group. Тогда теряется взаимоотношение объектов и подгрупп, а нужно ли оно вообще... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 17:19 |
|
||
|
Построить модель данных для системы прав доступа
|
|||
|---|---|---|---|
|
#18+
И получается вот такое малопонятное, но компактное безобразие ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 17:30 |
|
||
|
Построить модель данных для системы прав доступа
|
|||
|---|---|---|---|
|
#18+
...и отношение объектов с подгруппами вроде не теряется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 17:37 |
|
||
|
Построить модель данных для системы прав доступа
|
|||
|---|---|---|---|
|
#18+
Я бы наверно сделал одну древовидную таблицу "обьекты прав", куда сложил бы все "товары" и "телевизоры", и 1 таблицу "права на обьекты прав" с ссылкой на "обьекты прав" и и маской. Тогда запрос "есть ли у юзера права записи на обьект телевизоры" получается довольно просто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 17:50 |
|
||
|
Построить модель данных для системы прав доступа
|
|||
|---|---|---|---|
|
#18+
Согласен с Кот Матроскин, запрос "а какие у меня права" будет довольно популярным, так что можно денормализовать. В двух словах - с одной стороны имеем - объекты, подобъекты, группы объектов и т.п. С другой пользователи, роли, роли для пользователей, права роли для объектов или групп объектов - насколько хватит фантазии. И большую таблицу user_id, object_id, access_mask материализуя пересечение верхних двух групп. Если в эту таблицу руками не лазить и обновлять по триггерам, то запрос на права будет очень быстрым, хотя добавить пользователя, объект, назначить права будет медленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2013, 03:53 |
|
||
|
Построить модель данных для системы прав доступа
|
|||
|---|---|---|---|
|
#18+
SERG1257, планируется при входе пользователя в систему читать матрицу прав доступа, соответствующую данному пользователю и его роли, в массив в памяти, и в процессе работы права будут определяться мнговенно, так что время чтения из базы не так критично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2013, 09:48 |
|
||
|
Построить модель данных для системы прав доступа
|
|||
|---|---|---|---|
|
#18+
То бишь, вы проводите фильтрацию невидимых(недоступных пользователю) данных на клиенте. Тогда "в лоб" Объекты Группы объектов - как именно они формируются, что наследник от чего, не суть дела важно Объекты в группах Пользователи Роли РолиПользователей ПраваРолейНаГруппы Если пользователю (одному) нужны права на объект (один) то для него создается роль с одним членом (пользователем) и группа объектов (с одним объектом) Как то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2013, 17:16 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38140517&tid=1541380]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
34ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 324ms |

| 0 / 0 |
