alteração no comportamento do middleware keycloak can
andrex47 opened this issue · 4 comments
atualmente o middleware trabalha verificando se um usuário possui todas as permissões para acessar o recurso,a proposta é para que um usuário possa acessar um recurso se possui qualquer uma das permissões, por exemplo:
Considerando que um sistema possui uma role administrador que tem acesso a tudo, a minha proposta é rodar um loop e quando encontrar qualquer uma das permissões conceder acesso:
foreach ($guards AS $guard) {
if (Auth::hasRole($guard)) {
return $next($request);
}
}
O mesmo comportamento de verificar multiplas roles pode ser atingido através de um novo group repetindo o middleware do keycloak, enquanto o comportamento de apenas verificar uma role não pode ser atingido sem criar um novo middleware.
Abri uma open request alterar esse comportamento
Olá, André!
Tudo bem? Obrigado pela sua contribuição.
Não fico confortável com a mudança de um comportamento que já está em uso, quando não está "definitivamente" errado. O que acha de criarmos um novo middleware? Afinal, ele existe apenas para facilitar a vida do DEV, já que temos o Guard registrado.
Imagino duas opções:
1 - Criar um novo middleware chamado KeycloakCanOne ou KeycloakCanOneOf.
2 - Alterar o middleware para aceitar um separador OU:
$this->middleware('keycloak-web-can:permissao-um,permissao-dois');
3 - Alterar o middleware para aceitar um outro parâmetro permitindo o OU:
$this->middleware('keycloak-web-can:permissao-um|permissao-dois,1');
Considerações:
- A 1 é mais simples.
- A 2 deve criar uma nota na documentação explicando que não será possível utilizar E e OU ("|" e ",") - fica muito chato de implementar assim e não é um caso trivial de uso.
- A 3 é um meio termo, mas confesso que o "1" ou "true" não me soa muito bonito.
O que você acha?
Novo middleware, amém
Bacana! Vamos com "KeycloakCanOneOf" então.
tem uma nova pull request aberta com o novo middleware