Как назначить данные только пользователям, у которых есть определенная роль? - PullRequest
0 голосов
/ 06 марта 2011

Если у меня есть данные, которые я хочу назначить только пользователям, имеющим роль администратора, как бы я представил их в схеме БД? у меня есть таблица пользователей, таблица ролей, таблица user_roles, и этот конкретный пользователь связан с ролью администратора. Как тогда я смогу указывать информацию только для пользователей с правами администратора?

Ответы [ 2 ]

1 голос
/ 06 марта 2011

Я думаю, что ОП пытается установить поле в базе данных, где user_role равен роли администратора.Если это так, то вам нужно сделать что-то вроде:

UPDATE field FROM users LEFT JOIN user_role ON user.id = userrole.userid 
WHERE userrole.role = 'adminrole'

Теперь это будет полностью зависеть от вашей схемы, не могли бы вы опубликовать, чтобы мы могли дать вам более точную команду SQL?

РЕДАКТИРОВАТЬ: хорошо, чтение вопроса снова просто смущает меня.Пожалуйста, опубликуйте свою точную схему.

EDIT2: На вашем примере имеет смысл сохранить дополнительное поле в таблице пользователей, так как адрес связан с пользователем.Вы захотите установить это поле, только если users_role равен admin_user.Таким образом, вы также поможете, если вам нужно расширяться в будущем.Если нет, вы также можете определить другую таблицу с именем admin_addresses.Это будет указано только для пользователей с правами администратора и может выглядеть следующим образом: Admin_address_table (userID, address).

Для применения этой логики (в любом случае) вы можете использовать, например, хранимую процедуру.Передайте данные в хранимую процедуру, и она обновит поле адреса, если user_role будет равен admin_user.В качестве альтернативы вы можете использовать логику приложения при обновлении ваших данных.

Какой путь вам решать.У вас есть лучшее представление о том, что может произойти в будущем и какую именно информацию необходимо хранить.Надеюсь, это поможет.

1 голос
/ 06 марта 2011

EDIT4: Так что, если я понимаю, у вас есть таблица пользователей, таблица ролей и ассоциация, связывающая пользователей с ролями.

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

Или вы можете создать другие поля в таблице ассоциаций для параметризации ассоциации, но это повлияет на все остальные ассоциации. (или может иметь: X находится в группе B с option1 = 1, option2 = 42, option3 = NULL и обрабатывать поля параметров по-разному в зависимости от группы)

Другая идея, но я бы сделал это совершенно по-другому:

вы рассматриваете группы как пользователей, используя специальное поле вызова isGroup [True / False]. Затем вы создаете таблицу groupAssociation, в которой хранится информация о том, какой пользователь принадлежит какой группе.

Пример:

USER
--Id--    --IsGroup--
A         False
B         False
C         True
D         True

GROUPASSOCIATION
--uid--   --BelongsTo--
A          C
B          D
C          D

Обратите внимание, что вы можете каскадно говорить, что C включен в D. Затем вы создаете таблицу привилегий и связываете группы или пользователя с определенными привилегиями.

PRIVILEGE
--Id--    --Name--
1         Access Area 1
2         Access Area 2
3         Modify user
4         Edit on StackOverflow

PRIVILEGEASSOCIATION
--uid--   --pid--
A         4
C         2
D         1
C         3

Таким образом, у пользователя A будут все привилегии (одна прямая, две от группы C, одна для группы D, поскольку C включен в D), а у B будет только одна (из группы D)

Будет ли лучше в вашем случае?


EDIT3: учитывая ваш последний комментарий, это больше не действует Команда GRANT поможет вам разобраться в вашей проблеме.

Вы можете увидеть это прямо здесь: GRANT

Как пример:

GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';

Вы можете сделать это только для столбца, для всей таблицы или всей базы данных

РЕДАКТИРОВАТЬ: Ну хорошо, позвольте мне проверить группы. Я забыл эту часть.

EDIT2: я ничего не видел в настройке групповых разрешений в MySQL: это говорит, что это невозможно, но оно довольно старое. Но я пришел к этому другому ТАКому вопросу , и они используют PHP для управления группами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...