Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

alteração no comportamento do middleware keycloak can #85

Open
andrex47 opened this issue Oct 25, 2022 · 4 comments
Open

alteração no comportamento do middleware keycloak can #85

andrex47 opened this issue Oct 25, 2022 · 4 comments

Comments

@andrex47
Copy link
Contributor

andrex47 commented Oct 25, 2022

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

@mariovalney
Copy link
Owner

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?

@andrex47
Copy link
Contributor Author

Novo middleware, amém

@mariovalney
Copy link
Owner

Bacana! Vamos com "KeycloakCanOneOf" então.

@andrex47
Copy link
Contributor Author

andrex47 commented Nov 1, 2022

tem uma nova pull request aberta com o novo middleware

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants