|
|
|
Разграничение прав доступа
|
|||
|---|---|---|---|
|
#18+
Добрый день! Программа разрабатывается под web, будет работать от имени основного пользователя, который имеет доступ ко всем таблицам проекта, а все остальные "пользователи" будут виртуальными => как, предположим, на любом форуме... мы же не регистрируем их в Б.Д, а просто заносим в таблицу, например, members. Программа, имеет десятки классов, к методам которых предоставляется доступ на основе привелегий к таблицам Б.Д. Например, есть класс proprietor, в его подчинение ( на уровне программы ) таблицы: proprietor proprietor_xxx proprietor_stats Если пользователь имеет привелегию select к таблице proprietor, соответственно ему будет позволено пользоваться методом proprietor.view, если имеет привелегию update, то proprietor.edit, и т.п. Соответственно, нам необходимо спроектировать разграничение доступа для наших виртуальных пользователей. Привелегии будут даваться на основе ролей, роль в свою очередь может наследовать привелегии другой роли. Предполагаю, что структура таблицы для ролей будет следующая: Имя таблицы members_roles ROLE_NAME TABLE_NAME COLUMN_NAME PRIV Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. И таблица предоставленных пользователю ролей. Имя таблицы members_priv MEMBER_ID ROLE_NAME Код: plaintext 1. 2. 3. 4. 5. 6. Создаем роль default_role, которая будем иметь привелегию select к всей таблицы proprietor, proprietor_xxx Код: plaintext 1. 2. Если мы хотим предоставить пользователю привелегии роли default_role, нам необходимо в таблицу members_priv сделать insert с значениями ID пользователя, имя роли. Код: plaintext 1. Вопрос для меня в следующем, как правильно спроектировать наследование ролей. Предположим есть вторая роль second_role, она имеет привелегию update к таблице proprietor_stats. Код: plaintext 1. Теперь попробуем наследовать ролью default_role привелегии роли second_role , для этого создаим третью таблицу members_roles_inheritance ROLE INHERITANCE_ROLE Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext Думаю структура на первый взнляд логична ... Теперь усложним, предположим роль second_role наследует привелегии роли third_role Код: plaintext 1. 2. 3. 4. Получается, что теперь роль default_role имеет привелегии ролей second_role, third_role. Как Вы думаете, насколько данная структура имеет право на жизнь? Для меня очень серьезным вопросом остается, как мне потом получить все привелегии для пользователя, если роль наследует роль, та роль в свою очередь наследует еще роль как было показано выше?! Заранее благодарен за помощь и любые комментарии! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 13:45 |
|
||
|
Разграничение прав доступа
|
|||
|---|---|---|---|
|
#18+
Мы убрали наследование прав внутри ролей. Так прикладные админы больше путались. И еще у нас был принцип-1 пользователь-1 роль,потому как довольно часто наблюдаются перемешивания полномочий внутри "многоролевого" пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 11:02 |
|
||
|
Разграничение прав доступа
|
|||
|---|---|---|---|
|
#18+
Нормально наследование работает, наоборот куча проблем решается - есть роль редактор всех документов некоторого типа. Она наследуется от роли редактор отдельного документа . Т.е. все кто имеют роль редактор документов типа А, сразу становятся редакторами всех документов типа А. Но можно дать пользователю редактирования отдельных документов. При этом при наследовании мы указываем связи по какому параметру наследование идет - в данном случае по типам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 11:09 |
|
||
|
Разграничение прав доступа
|
|||
|---|---|---|---|
|
#18+
ShtockМы убрали наследование прав внутри ролей. Так прикладные админы больше путались. И еще у нас был принцип-1 пользователь-1 роль,потому как довольно часто наблюдаются перемешивания полномочий внутри "многоролевого" пользователя. Как уже сказал Mainframe_старый , данная структура решает очень много проблем, легче управлять пользователями "одним кликом", а для каждого пользователя своя роль, это слишком накладно, а если их 300, 500 ... То, что я пытаюсь реализовать, основано на разграничение доступа в Oracle, все П.О. я пишу использую данную Б.Д., но сейчас как уже говорил, появилась необходимость написать программу под WEB, и мне не хочется создавать десятки пользователей, которые будут иметь доступ извне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 11:34 |
|
||
|
Разграничение прав доступа
|
|||
|---|---|---|---|
|
#18+
BlackТо, что я пытаюсь реализовать, основано на разграничение доступа в Oracle, все П.О. я пишу использую данную Б.Д., но сейчас как уже говорил, появилась необходимость написать программу под WEB, и мне не хочется создавать десятки пользователей, которые будут иметь доступ извне. Во-первых, десятки пользователей лучше создать без всякого описанного здесь геморроя. Для тысяч - можно поискать другое решение, например, использовать OID. Во-вторых, даже для тысяч пользователей следует создать серверные роли. Скажем, для упомянутого Вами форума это будут роли "гость", "пользователь", "модератор", "администратор". Каждой такой роли - соотнести серверный account; соответственно, "десятки пользователей" будут логинится под эккаунтом своей роли. В принципе также можно воспользоваться механизмом application role, но имхо это неоправданный геморрой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 14:13 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34893534&tid=1544225]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
169ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 449ms |

| 0 / 0 |
