Я использую Laravel Lighthouse.
Следующая ситуация: у меня есть пользователи, и им нужно разрешить доступ к разным наборам данных и запускать разные мутации.
Мое решение: пользователям назначаются роли, и эти роли определяют, к каким наборам данных пользователь может получить доступ и какие мутации можно запускать.
Я застрял в реализации. Что я мог сделать, так это записать все мои запросы и мутации в мою схему и иметь политики для ограничения доступа к ним. Я бы предпочел иметь способ видеть из схемы, какая роль к чему имеет доступ.
Моя идея: иметь тип для каждой роли и в этом типе ассоциировать, к каким данным можно получить доступ и какие мутации можно запускать.
Вот пример кода, который может объяснить, что я собираюсь сделать, даже если синтаксис, вероятно, неверен:
type Query {
me: User @auth
}
type User {
id: ID
username: String
first_name: String
wage: Float
password: String
roles: [Role]
role(name: String! @eq): Role @find
}
type Role {
id: ID
name: String
}
type AdminRole {
#set of users whose data the admin has access to
#also directly restrict the amount of attributes that are accessible (e.g. password is not accessible)
#this is invalid syntax, I know
users: [Users] @all {
id
first_name
wage
}
#a mutation the admin has access to
updateUser(id: ID!, wage: Float): User @update
}
Какой запрос я бы хотел выполнить для администратора, чтобы получить всю заработную плату:
query {
me {
role(name: "AdminRole") {
users {
wage
}
}
}
}
Какую мутацию я бы хотел запустить для админа, чтобы обновить зарплату пользователя:
mutation {
me {
role(name: "AdminRole") {
updateUser(id: 7, wage: 10.00) {
id
wage
}
}
}
}
Поэтому вместо написания политик, ограничивающих доступ к вещам, я бы предпочел, чтобы все было неявно определено в схеме. Это потребовало бы определения и ответа. Что может сделать администратор? более интуитивно понятный и легкий для понимания, потому что он записан в одном месте, а не в нескольких политиках.
Я полагаю, что это невозможно, как я описал выше. Что ближе всего к этому? Или есть проблемы с этим подходом?