Хотя Hasura может обрабатывать динамические c роли (вы можете использовать API для создания новых ролей и новых правил доступа на лету) с Hasura, я думаю, что в этом случае это не требуется.
Проблема в том, что я хочу быть уверен, что только администраторы могут создавать / удалять эти комнаты / пользователей / разрешения, и что только правильные пользователи могут видеть эти комнаты. Есть ли способ заставить Хасуру проверить разрешения данного пользователя и вернуть соответствующие данные?
Хасура позволяет установить правило разрешений, которое пересекает отношения, что делает это возможным. Посмотрите пример article-сотрудники в документах Hasura .
Предполагая, что ваши модели rooms
, users
и room_users
и у вас настроены отношения так, чтобы room.users
возвращает список пользователей для определенной комнаты, разрешение для роли user
в таблице rooms
может быть выражено следующим образом:
Allow SELECT on a row in rooms if
rooms.users.id: _eq: x-hasura-user-id
Это означает: если список пользователей комнаты содержит по крайней мере один user_id , равный x-hasura-user-id , затем предоставьте доступ к этой комнате.
Я настроил это в приложении heroku : https://multiple-roles-hasura.herokuapp.com/console/api-explorer
Попробуйте следующие запросы в GraphiQL:
- Установите заголовки на:
x-hasura-role: user
x-hasura-user-id: 1
Запустите следующий запрос:
query {
rooms {
id
name
}
}
Вы увидите, что ответ содержит только те комнаты, к которым
пользователь1 имеет доступ к Переключатель
x-hasura-user-id
с различными значениями 1, 2, 3, 4, 5, 6 и вы увидите разные результаты для одного и того же запроса. В основном правильные комнаты, к которым имеет доступ только текущий пользователь.
Проверьте модели и разрешения для моделей на: