Como gerenciar as permissões (autorização) no Rails usando o Devise + CanCanCan

O que vamos Aprender?

Como gerenciar as permissões de acesso no seu App Rails usando o Devise + CanCanCan.

Porque Aprender?

A maior parte dos sites tem diferentes níveis de permissão baseados no tipo de usuário (cliente, operador, admin e etc) usar o CanCanCan para implementar isto é uma das maneiras mais utilizadas (e confiáveis) de fazer isso no Ruby On Rails.

 

Ingredientes

1. Ruby 2.3.1
2. Rails 5
3. Sqlite3
4. CanCanCan (Gem)
5. Devise (Gem)

Código completo

Como de costume, você pode acessar o código desenvolvido durante o tutorial no GitHub para realizar comparações caso você tenha alguma dúvida :), acessa aqui o código e já me segue por lá.

REVEJA:

Screencast #1:
Criando Autenticação com o Facebook! (Devise + Omniauth)
Screencast #2: Criando um e-commerce com Spree em 15 minutos!
Screencast #3: Como criar um Chat em tempo real usando Action Cable (Rails 5)

Lista de comandos usados no Screencast em ordem (Acompanhe junto do vídeo 🙂 )
Parte 1 – Gerando nosso projeto com autenticação via Devise
  1. Crie o Projeto:
    1
    
    rails new auth
  2. Entre na pasta do projeto que foi criado:
    1
    
    cd auth
  3. Inclua as Gems:
    1
    2
    
    gem 'devise'
    gem 'cancancan'
  4. Rode o Bundle para instalar as gems:
    1
    
    bundle
  5. Crie os Scaffolds de teste:
    1
    2
    
    rails g scaffold user admin:boolean name:string
    rails g scaffold car name:string
  6. Instale o devise:
    1
    
    rails g devise:install
  7. ‘Instale’ o devise no model user:
    1
    
    rails g devise user
  8. Rode as migrations:
    1
    
    rake db:migrate
  9. Adicione a validação no arquivo app/controllers/application_controller.rb
    1
    
    before_action :authenticate_user!
  10. Rode o servidor para testarmos:
    1
    
    rails s
  11. Acesse o browser e vá até http://localhost:3000/users
  12. Crie uma conta e tente adicionar um carro (como foi demonstrado no vídeo)
Parte 2 – Incluindo a autorização via CanCanCan
  1. Gere o arquivo de ability
    1
    
    rails g cancan:ability
  2. Substitua o conteúdo do arquivo app/models/ability.rb por:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    class Ability
      include CanCan::Ability
      def initialize(user)
        if user.admin?
          can :manage, :all
        else
          can [:read, :update, :destroy], Car
          can :manage, User
        end
      end
    end
  3. Inclua a seguinte linha no arquivo app/controller/application_controller.rb:
    1
    
    load_and_authorize_resource
  4. Para adicionar a lógica também ao front-end substitua a linha (<%= link_to 'New Car', new_car_path %>) por:
    1
    2
    3
    
    <% if can? :create, Car %>
      <%= link_to 'New Car', new_car_path %>
    <% end %>
  5. Agora no Browser vá até http://localhost:3000/cars e tente criar um novo carro:
  6. Um bônus que não estava no vídeo (Vamos mandar o CanCanCan redirecionar o User quando ele não tiver permissão), coloque o seguinte conteúdo em app/controller/application_controller.rb:
    1
    2
    3
    
    rescue_from CanCan::AccessDenied do |exception|
      redirect_to '/', :alert => exception.message
    end
  7. Agora no Browser teste novamente para ver o redirecionamente, acesse http://localhost:3000/cars e tente criar um novo carro:
  8. Agora vá até http://localhost:3000/users e edite seu usuário para que ele seja um administrador (como no vídeo)
  9. Agora finalmente se você for a http://localhost:3000/cars e tentar criar um novo carro você vai ter sucesso porque agora você é um administrador \o/.
  10. Parabéns nós conseguimos 🙂

 

Conclusão

Usando o CanCanCan + Devise você consegue em poucos minutos criar um sistema de alta qualidade para gerenciar a autenticação e a autorização de usuários. Vale a pena dar uma olhada na documentação do CanCanCan para conhecer mais opções para testar a autorização de recursos e etc. (Clique aqui para acessar a documentação)

Se você ficou com alguma dúvida ou tem sugestões, comente ai em baixo ou me adicione no facebook clicando aqui.

Muitas novidades estão para acontecer aqui no blog (Sério, vem coisa boa por ai) então se inscreve na nossa newsletter ai do lado direito em “Se inscreva” para saber das coisas novas que vão surgir por aqui em breve.

Pequeno Merchandising do bem 🙂

Como eu já disse no Post anterior a minha namorada está com um projeto bem legal que pode ser a diferença entre você conseguir ou não aquele Job maneiro :).
Ela é a designer responsável pela beleza desde Blog \o/ e o projeto é um site onde você pode encomendar um currículo gráfico (um currículo bonito que impressiona) para aumentar suas chances de conseguir um bom Job.
Dá uma olhada lá no projeto clicando aqui.

img-curriculo-grafico-com-01
Muito Obrigado por acompanhar este Blog!

Abraço,
Leonardo Scorza.

Deixe seu Feedback!

Comentários