Um método que usei com grande sucesso para expor o nível de acesso ou as funções que o usuário autenticado possui em relação a um recurso específico é expô-lo como verbos HTTP na própria entidade.
Por exemplo, solicitando uma lista de todos os clientes:
GET /customers
{
customers: [
{
id: "/customers/1"
allowed: ["GET", "UPDATE", "PUT", "DELETE"]
},
{
id: "/customers/2"
allowed: ["GET"]
}
]
}
O acesso de leitura indicado por GET UPDATE, PUT, DELETE indicaria o acesso Editor e / ou Administrador com base na semântica da sua API. Se esse tipo de abstração não funcionar no seu caso, você poderá fazer o lançamento diretamente.
Além disso, você pode fornecer um filtro para a solicitação do cliente
GET /customers?role=admin
Retornaria apenas os clientes para os quais o usuário autenticado tem a função "admin".