Я строю небольшую систему разрешений, но, к сожалению, я не эксперт SQL любым способом.MySQL: лучший способ проверить, имеет ли пользователь разрешение по ролям
В этой системе я решил предоставить всем пользователям роль, а затем назначить определенные разрешения для ролей. Мои текущие таблицы базы данных выглядит следующим образом:
Мой вопрос: Какой самый лучший способ проверить, является ли данный User.id
в качестве разрешения, указав значение Permission.permission_name
. Я придумал следующий запрос:
SELECT EXISTS (
SELECT perm.id
FROM `User` userr
INNER JOIN `Role_Permission` connectionc
ON userr.role_id = connectionc.role_id
INNER JOIN `Permission` perm
ON connectionc.permission_id = perm.id
WHERE userr.id = 1
AND perm.permission_name LIKE 'doStuff'
) as userHasPermission
Он работает, но от моего понимания присоединения дорого и что запрос присоединяется содержанием 3 таблицы, а затем фильтровать то, что ему нужно.
Ссылка на sqlfiddle: http://sqlfiddle.com/#!2/6ed7b/1
Спасибо.
Немного сбивает с толку "INNER JOIN роль" роль user_r.id = role.id ". Не должно быть «INNER JOIN« Роль »роль ON userr.role_id = role.id». IMO. Я не вижу причин, по которым нужно присоединяться к «ролям». –
@JA Вы правы. ;) Просто отредактирован. – TCB13
SQL кажется правильным. Не могли бы вы инициировать/предоставить sqlfiddle.com, пожалуйста? –