Guia do desenvolvedor | Rdocs | Screencast 1 | Screencast 2
Cancancan é uma biblioteca de autorização para Ruby e Ruby on Rails, que restringe quais recursos um determinado usuário pode acessar.
Todas as permissões podem ser definidas em um ou vários arquivos de habilidade e não duplicados entre controladores, visualizações e consultas de banco de dados, mantendo sua lógica de permissões em um local para facilitar a manutenção e o teste.
Consiste em duas partes principais:
A Autorizações Biblioteca que permite definir as regras para acessar objetos diferentes e fornece aos ajudantes para verificar essas permissões.
Os ajudantes de trilhos para simplificar o código nos controladores do Rails, executando o carregamento e a verificação de permissões de modelos automaticamente e reduzindo o código duplicado.
Você quer patrocinar o Cancancan e mostrar seu logotipo aqui? Verifique nossa página de patrocinadores.
Vá ao nosso guia completo do desenvolvedor para aprender a usar o Cancancan em detalhes.
Adicione isso ao seu GemFile:
gem 'cancancan'
e execute o comando bundle install
.
As permissões de usuário são definidas em uma classe Ability
.
rails g cancan:ability
Aqui segue um exemplo de regras definidas para ler um modelo de postagem.
class Ability
include CanCan :: Ability
def initialize ( user )
can :read , Post , public : true
return unless user . present? # additional permissions for logged in users (they can read their own posts)
can :read , Post , user : user
return unless user . admin? # additional permissions for administrators
can :read , Post
end
end
As permissões do usuário atual podem ser verificadas usando a can?
e cannot?
Métodos em visualizações e controladores.
<% if can? :read, @post %>
<%= link_to "View", @post %>
<% end %>
Um dos principais recursos do Cancancan, em comparação com outras bibliotecas de autorização, é a possibilidade de recuperar todos os objetos que o usuário está autorizado a acessar. A seguir:
@posts = Post . accessible_by ( current_ability )
Usará suas regras para garantir que o usuário recupere apenas uma lista de postagens que possam ser lidas.
O authorize!
O método no controlador aumentará uma exceção se o usuário não conseguir executar a ação fornecida.
def show
@post = Post . find ( params [ :id ] )
authorize! :read , @post
end
Definir isso para cada ação pode ser tedioso; portanto, o método load_and_authorize_resource
é fornecido para autorizar automaticamente todas as ações em um controlador de recursos de estilo RESTful. Ele usará uma ação antes para carregar o recurso em uma variável de instância e autorizá -lo para cada ação.
class PostsController < ApplicationController
load_and_authorize_resource
def show
# @post is already loaded and authorized
end
def index
# @posts is already loaded with all posts the user is authorized to read
end
end
Vá ao nosso guia completo do desenvolvedor para aprender a usar o Cancancan em detalhes.
Se você tiver alguma dúvida ou dúvida sobre Cancancan, para o qual você não consegue encontrar a solução na documentação, abra uma pergunta no StackOverflow com tag Cancancan
Se você encontrar um bug, adicione um problema no github ou bifurque o projeto e envie uma solicitação de tração.
Cancancan usa as avaliações para testar a base de código em várias versões de trilhos, bem como os diferentes adaptadores de modelo.
Ao desenvolver pela primeira vez, você precisa executar bundle install
e depois bundle exec appraisal install
, para instalar os diferentes conjuntos.
Em seguida, você pode executar todos os arquivos de avaliação (como o CI), com appraisal rake
ou apenas executar um conjunto específico DB='sqlite' bundle exec appraisal activerecord_5.2.2 rake
.
Se você deseja executar um conjunto específico de testes em um arquivo ou pasta específica, poderá usar DB='sqlite' SPEC=path/to/file/or/folder bundle exec appraisal activerecord_5.2.2 rake
.
Se você usar o Rubimina, poderá executar testes RSPEC configurando o modelo de configuração RSPEC como este:
Veja a contribuição para obter mais informações.
Graças aos nossos patrocinadores e a todos os colaboradores cancanos. Veja o Changelog para a lista completa.