A gema CanCan não é mais mantida . Use outra biblioteca de autorização, como CanCanCan ou Pundit.
<img src=“https://fury-badge.herokuapp.com/rb/cancan.png” alt=“Versão Gem” /> <img src=“https://secure.travis-ci.org/ryanb/ cancan.png?branch=master” /> <img src=“https://codeclimate.com/github/ryanb/cancan.png” />
Wiki | RDocs | Transmissão de tela
CanCan é uma biblioteca de autorização para Ruby on Rails que restringe quais recursos um determinado usuário pode acessar. Todas as permissões são definidas em um único local (a classe Ability
) e não são duplicadas em controladores, visualizações e consultas de banco de dados.
No Rails 3 , adicione isso ao seu Gemfile e execute o comando bundle
.
gema "cancan"
No Rails 2 , adicione isso ao seu arquivo Environment.rb.
configuração . gema "cancan"
Alternativamente, você pode instalá-lo como um plugin.
Instalação do plugin Rails git://github.com/ryanb/cancan.git
CanCan espera que exista um método current_user
no controlador. Primeiro, configure alguma autenticação (como Authlogic ou Devise). Consulte Alterando padrões se precisar de um comportamento diferente.
As permissões do usuário são definidas em uma classe Ability
. CanCan 1.5 inclui um gerador Rails 3 para criar esta classe.
Rails g cancan: habilidade
No Rails 2.3, basta adicionar uma nova classe em 'app/models/ability.rb` com o seguinte conteúdo:
habilidade de classe incluir CanCan :: Habilidade def inicializar ( usuário ) fim fim
Consulte Definindo Habilidades para obter detalhes.
As permissões do usuário atual podem então ser verificadas usando o can?
e cannot?
métodos na visualização e no controlador.
<% se puder? :atualização, @artigo %> <%= link_to "Editar", edit_article_path(@article) %> <% fim %>
Veja Verificando Habilidades para mais informações
A authorize!
O método no controlador gerará uma exceção se o usuário não for capaz de executar a ação especificada.
definitivamente mostrar @artigo = Artigo . encontrar ( parâmetros [ :id ]) autorizar! :ler , @artigo fim
Definir isso para cada ação pode ser entediante, 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á um filtro before para carregar o recurso em uma variável de instância e autorizá-lo para cada ação.
classe ArtigosController < ApplicationController carregar_e_autorizar_recurso definitivamente mostrar # @article já está carregado e autorizado fim fim
Consulte Autorizando ações do controlador para obter mais informações.
Se a autorização do usuário falhar, uma exceção CanCan::AccessDenied
será gerada. Você pode capturar isso e modificar seu comportamento no ApplicationController
.
classe ApplicationController < ActionController :: Base Rescue_from CanCan :: Acesso negado do | exceção | redirecionar_to root_url , :alert => exceção . mensagem fim fim
Consulte Tratamento de exceções para obter mais informações.
Se você quiser garantir que a autorização aconteça em todas as ações do seu aplicativo, adicione check_authorization
ao seu ApplicationController.
classe ApplicationController < ActionController :: Base verificação_autorização fim
Isto irá gerar uma exceção se a autorização não for executada em uma ação. Se você quiser pular isso, adicione skip_authorization_check
a uma subclasse do controlador. Consulte Garantir autorização para obter mais informações.
Atualizando para 1.6
Definindo Habilidades
Verificando Habilidades
Autorizando ações do controlador
Tratamento de exceções
Alterando padrões
Ver mais
Se você tiver algum problema com o CanCan para o qual não consegue encontrar a solução na documentação, adicione um problema no GitHub ou bifurque o projeto e envie uma solicitação pull.
Para executar as especificações, você deve chamar bundle
e depois rake
. Consulte as especificações/README para obter mais informações.
CanCan foi inspirado em declarative_authorization e aegis. Também muito obrigado aos contribuidores do CanCan. Veja o CHANGELOG para a lista completa.