Так что я просто бездельничаю с приложением NodeJS и пытаюсь реализовать систему разрешений, используя мою базу данных.
Я впервые работаю с любой средой SQL, поэтому, пожалуйста, исправьте меня, если яЯ делаю что-то ужасно неправильно.
У меня есть следующие таблицы:
permissions:
id,
name
users:
id,
name
roles:
id,
name
user_permissions:
id,
user_id,
permissions_id
role_permissions:
id,
role_id,
permission_id
user_roles:
id,
user_id,
role_id
Таким образом, есть 2 способа, которыми пользователь может получить разрешение, либо через роль, назначенную в user_roles, либо напрямую через user_permissions.
Я уже получил следующий запрос, который, кажется, работает правильно.
SELECT permissions.name
FROM permissions
INNER JOIN role_permissions ON role_permissions.permission_id=permissions.id
INNER JOIN user_roles ON user_roles.role_id=role_permissions.role_id
AND user_roles.user_id=?
Однако, он ищет только разрешения, назначенные через роль.
Не могу показатьсячтобы заставить работать запрос, который правильно запрашивает отдельные разрешения.
Всякий раз, когда я пытаюсь выполнить следующий запрос
SELECT * FROM permissions INNER JOIN user_permissions ON user_permissions.user_id=?;
, я получаю:
+----+-------------+----+---------+---------------+
| id | name | id | user_id | permission_id |
+----+-------------+----+---------+---------------+
| 1 | permission1 | 1 | 3 | 5 |
| 2 | permission2 | 1 | 3 | 5 |
| 3 | permission3 | 1 | 3 | 5 |
| 4 | permission4 | 1 | 3 | 5 |
| 5 | permission5 | 1 | 3 | 5 |
+----+-------------+----+---------+---------------+
Здесь у меня естьРазрешение 5 назначается как индивидуальное разрешение для пользователя 3, но из-за объединения оно присоединяется к каждому разрешению.
Так что, я думаю, я еще не до конца понял, что делает JOIN. Может быть, кто-нибудь мог бы помочь мне здесь и объяснить, что происходит?