[:koshtech] [:blog]

Authlogic + CanCan no Rails 3: Autenticação e autorização de usuários - Parte 2
Nesse segundo post sobre autenticação e autorização de usuários falaremos sobre autorização utilizando a gem Cancan desenvolvida por Ryan Bates (https://github.com/ryanb/cancan). Tendo como base uma aplicação que se deseje aplicar permissionamento com um scaffold simples de Posts e mais as modificações feitas nas parte 1, siga os seguintes passos para entender o funcionamento da gem Cancan e como aplica-la em um projeto. 
Para adicionar a gem Cancan adicione ao seu Gemfile a linha abaixo e rode o comando bundle no terminal.

gem 'cancan'

Adicione o modelo Ability com o seguinte código:


class Ability
include CanCan::Ability def initialize(user)
end
end

No método initialize, user será passado como parâmetro e dentro do método serão definidas as permissões associadas ao Post de acordo com o role do usuário. Crie uma migração para adicionar a coluna role ao User. No código abaixo foram definidos dois roles para o usuário (admin e moderator) e permissões para os mesmos gerenciarem, atualizarem e lerem os posts.

class Ability
include CanCan::Ability

def initialize(user)
user ||= User.new
if user.role == "admin"
can :manage, Post
elsif user.role == "moderator"
can :update, Post
can :read, Post
else
can :read, Post
end
end
end

Desse modo, já podemos adicionar condições à view de acordo com as permissões dos usuários.


<% if can? :update, @post %>
<%= link_to 'Edit', edit_post_path(@post) %> |
<% end %>
<% if can? :destroy, @post %>
<%
=
link_to 'Destroy', post_path(@post), :method => :delete %> |
<% end %>

Para que o usuário não tenha acesso à uma página que ele não tenha permissão para entrar através da url, adicione ao controller o seguinte método:


load_and_authorize_resource

Para adicionar uma notificação na tela, que será ativada se o usuário não tiver permissão de acesso em uma página, adicione o seguinte código no arquivo app/controllers/application_controller.rb.


rescue_from CanCan::AccessDenied do |exception|
flash[:notice] = "Access denied!"
redirect_to root_url
end

Seguindo esses passos e mais algumas modificações de acordo com o objetivo da sua aplicação pode-se implementar as permissões necessárias para seu projeto.
Por Vinicius Rodrigues
22/05/2012, 12:32 h

Veja também


FACEBOOK

> Visite, curta, siga

TWITTER

> Siga

GOOGLE +

> Adicione aos seus circulos

koshtech.com

[:koshtech] Rio de Janeiro
Rua Bastos de Oliveira, 139 parte
Oswaldo Cruz - RJ

Telefone: 55 21 3936-5322 / 24 981-361-642

koshtech.com © 1997-2017

 

Tecnologia [:batepronto] © 2012-2017 by [:koshtech] · Política de Privacidade · Termos de Uso