mariovalney / laravel-keycloak-web-guard

Simple Keycloak Guard to Laravel Web Routes - https://packagist.org/packages/vizir/laravel-keycloak-web-guard
146 stars 80 forks source link

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

Open andrex47 opened 1 year ago

andrex47 commented 1 year ago

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 commented 1 year ago

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:

O que você acha?

andrex47 commented 1 year ago

Novo middleware, amém

mariovalney commented 1 year ago

Bacana! Vamos com "KeycloakCanOneOf" então.

andrex47 commented 1 year ago

tem uma nova pull request aberta com o novo middleware