# отредактировано
ОК.Я удалю все разрешения на роли и добавлю их снова.
Можно ли объединить все 4 запроса в один?
Я создаю систему разрешений.
Допущения:
Каждый пользователь может иметь более одной роли
Каждая роль может иметь более одного разрешения
Разрешения также могут быть назначены непосредственно пользователю (они имеют более высокий приоритет, чем разрешения для ролей)
Приоритет разрешений:
разрешение роли
отказ в роли
разрешение пользователя
отказано пользователю
Отказ в предоставлении пользователю самого высокого приоритета
Вопрос в PHP довольно прост:
Я создаюмассив со всеми разрешениями
Я получаю разрешения для роли (порядок доступа)
Я назначаю доступ, если он запрещен, яперезаписать доступ с отказом
я делаю то же самое для прав пользователя
я назначаю доступ, если он запрещен, перезаписываю доступ с отказом
Таким образом, у меня есть весь массив с разрешениями для конкретного пользователя, например, $ user ['missions '] [' delete_post '] // output: false ||true
Мне нужно сделать проверку разрешения сейчас.Это означает, что пользователь имеет доступ к, например, «delete_post»
У меня есть такая структура базы данных: Здесь скрипка с базой данных: БД скрипка
У меня проблема с первымquery:
**Query #1**
=============================================
List of all roles related to permission with id 3 */
SELECT DISTINCT role_id, access, permission_id FROM role_permissions WHERE permission_id=3 ORDER BY role_id, access DESC;
| role_id | access | permission_id |
| ------- | ------ | ------------- |
| 5 | 0 | 3 |
| 8 | 1 | 3 |
| 10 | 1 | 3 |
| 10 | 0 | 3 |
Как и ожидалось, я должен получить
| role_id | access | permission_id |
| ------- | ------ | ------------- |
| 8 | 1 | 3 |
Я не могу добавить WHERE permission_id=3 AND access=1
, потому что я получаю результат: role_id = 8 и role_id = 10, но role_id = 10действительно нет доступа.