У меня есть конечная точка JSON API для извлечения пользователя.Этот ресурс также будет использоваться для получения разрешений пользователя, для отображения или скрытия определенных элементов в нашем приложении переднего плана.
Ресурс выглядит следующим образом:
HTTP/1.1 200 OK
Content-Type: application/vnd.api+json
{
"jsonapi": {
"version": "1.0"
},
"meta": {
"content-type": "application/vnd.api+json"
},
"links": {
"self": "/users/some-uuid"
},
"data": {
"type": "users",
"id": "some-uuid",
"attributes": {
"email": "some-email@example.com",
"permissions": [
"view-all-users",
"view-all-shifts"
]
},
"relationships": {
"roles": {
"data": [
{
"type": "role",
"id": "some-role-uuid"
}
]
}
}
}
}
Атрибут permissionsсодержит слагы для разрешений, которые есть у пользователя.
Если бы этот атрибут не присутствовал, внешнее приложение должно было бы включить ресурсы roles
и roles.permissions
, чтобы иметь возможность получить разрешения пользователя.Этот ответ будет выглядеть следующим образом:
HTTP/1.1 200 OK
Content-Type: application/vnd.api+json
{
"jsonapi": {
"version": "1.0"
},
"meta": {
"content-type": "application/vnd.api+json"
},
"links": {
"self": "/users/some-uuid"
},
"data": {
"type": "users",
"id": "some-uuid",
"attributes": {
"email": "some-email@example.com",
"permissions": [
"view-all-posts",
"edit-all-posts"
]
},
"relationships": {
"roles": {
"data": [
{
"type": "role",
"id": "some-role-uuid"
}
]
}
},
"included": [
{
"type": "roles",
"id": "some-role-uuid",
"attributes": {
"name": "Editor"
},
"relationships": {
"permissions": {
"data": [
{
"type": "permission",
"id": "some-permission-uuid"
},
{
"type": "permission",
"id": "some-permission-uuid-2"
}
]
}
}
},
{
"type": "permissions",
"id": "some-permission-uuid",
"attributes": {
"slug": "view-all-posts"
}
},
{
"type": "permissions",
"id": "some-permission-uuid",
"attributes": {
"slug": "edit-all-posts"
}
}
]
}
}
В этом случае внешний интерфейс должен выполнить большую обработку, чтобы добраться до слагов разрешений.У меня такой вопрос: плохо ли иметь атрибут короткой руки permissions
на пользовательском ресурсе, как в предыдущем примере, или же передний конец всегда должен добираться до слагов через отношения?
ПримечаниеВ будущем у нас будет интерфейс администратора, где пользователь может управлять пользователями, ролями и разрешениями.Вот почему роли и разрешения доступны как отдельные объекты.