Ao usar cancancan com devise, devise precisa ser adicionado aability.rb?
Pergunta : ao usar o cancancan para autorização e o devise para autenticação, tenho que definir alguma autorização para a parte do aplicativo do aplicativo ou o devise cuida de tudo sozinho?
Exemplo
Por exemplo, para (todos) os outros recursos, devemos colocar load_and_authorize_resourceno controlador desse recurso para que os usuários que não deveriam acessá-lo sejam impedidos de fazê-lo. Então, para permitir o acesso a quem deve ter acesso, podemos definir habilidades adicionando um código como este para ability.rb:
# ability.rb
can [:index, :show], [Patient], user_id: user.id
De volta à minha pergunta - eu tenho que adicionar load_and_authorize_resourcealgum controlador do dispositivo e definir permissões para controladores do dispositivo ability.rb? OU o devise cuida de tudo isso sem que o desenvolvedor precise fazer nada?
Obviamente, não queremos permitir que um usuário altere as informações da conta de outro usuário!
Respostas
É importante distinguir entre criar parte da autorização de informações da conta (criação da sessão / logout / e-mail + senha + restauração / alteração se você tiver ativado) e qualquer outra lógica personalizada e dados relacionados a ela (por exemplo - nomes, tamanhos de sapatos, o que for ) que é mantido dentro ou acessa o mesmo modelo.
Controladores Devise, se você não os alterou muito - são muito simples e não precisam de controle de acesso adicional porque, por design, o usuário só é capaz de editar seus próprios dados de autenticação (eles simplesmente não manipulam o ID do usuário de fora, portanto, não há como adulterar isto). Além disso, apenas adicionar load_and_authorize_resourcenão terá efeito, ou mais provavelmente irá interferir no código de dispositivo existente, porque ele não foi projetado em torno do cancancan.
Mas se você tem seus próprios controladores para perfil (s) de usuário, como índice de usuário, admin editando perfis de outros, etc. - obviamente, você deve facilitar o controle de acesso lá.