Upload
rafaeldx7
View
2.392
Download
1
Embed Size (px)
DESCRIPTION
CanCan é uma ferramenta de autorização para aplicações Rails. Nessa apresentação o objetivo consiste em abordar uma visão geral do CanCan fazendo um comparativo com o Acl9.
Citation preview
Autorização com CanCanRafael Carvalho
@rafaeldx7
Friday, October 22, 2010
Objetivo
• Abordar as funcionalidades do CanCan
• Fazer um comparativo com o Acl9.
Friday, October 22, 2010
O que é CanCan?
É uma ferramenta de autorização para aplicações Rails.
É fornecida como uma rubygem ou plugin.
Friday, October 22, 2010
Autorização ≠ Autenticação
Friday, October 22, 2010
Autenticação
Processo que verifica se alguém é de fato quem declara ser.
Pode ser feito através de senha, cartão, leitura biométrica, etc.
No nosso caso: é logar um usuário. Pode ser feito através de senha ou OpenID, por exemplo.
Friday, October 22, 2010
O CanCan não faz isso!
Friday, October 22, 2010
O Acl9 não faz isso!
Friday, October 22, 2010
Autenticação para Rails
• Devise
• AuthLogic
• Restful Authentication
• Clearance
Friday, October 22, 2010
Autorização para Rails
• CanCan
• Acl9
• Declarative Authorization
• Role Requirement
Friday, October 22, 2010
Visão geral do Acl9
Friday, October 22, 2010
Acl9 é baseado em papéis (roles)
E uma tabela roles referente a esse model.
Friday, October 22, 2010
Definindo um Subject
E criar a tabela roles_users para associação entre Roles e Users (Subjects).
Subject é o objeto que terá permissão controlada.
Friday, October 22, 2010
Authorization ObjectsObjects são os objetos acessados pelo Subject.
Friday, October 22, 2010
Métodos do SubjectA chamada ao acts_as_authorization_subject
define os seguintes métodos:
subject.has_role?(role, object = nil) subject.has_role!(role, object = nil) subject.has_no_role!(role, object = nil) subject.has_roles_for?(object) subject.has_role_for?(object) subject.roles_for(object) subject.roles_for(object).map(&:name).sort subject.has_no_roles_for!(object) subject.has_no_roles!
Friday, October 22, 2010
Métodos do ObjectA chamada ao acts_as_authorization_object define os
seguintes métodos:
object.accepts_role?(role_name, subject) object.accepts_role!(role_name, subject) object.accepts_no_role!(role_name, subject) object.accepts_roles_by?(subject) object.accepts_role_by?(subject) object.accepts_roles_by? object.accepts_roles_by(subject)
Friday, October 22, 2010
Definindo as Regras de Acesso
Friday, October 22, 2010
Visão Geral do CanCan
Friday, October 22, 2010
Principais Características do CanCan
• Não baseado em papéis (mas pode ser)
• Bastante flexível
• Permissões centralizadas na classe Ability
• Fácil de testar com RSpec e TestUnit
Friday, October 22, 2010
Classe de Permissões
Friday, October 22, 2010
Testando as Permissões
Friday, October 22, 2010
Autorizando as Actions
Friday, October 22, 2010
Mostrando Links
Esse método can? será chamado para o current_user.
Friday, October 22, 2010
Comparativo
Friday, October 22, 2010
Model no Acl9
Friday, October 22, 2010
Model no CanCan
Nada.
Friday, October 22, 2010
Model no CanCan
A menos que seja necessário criar papéis.
Friday, October 22, 2010
Controller no Acl9
Friday, October 22, 2010
Controller no CanCan
Friday, October 22, 2010
Flexibilidade no CanCan
Friday, October 22, 2010
Vantagens do CanCan
• Simplicidade é essencial
• Flexibilidade é necessária
• Centralização das regras é interessante
O CanCan é uma boa opção quando:
Friday, October 22, 2010
Referências
• http://github.com/ryanb/cancan
• http://railscasts.com/episodes/192-authorization-with-cancan
• http://asciicasts.com/episodes/192-authorization-with-cancan
Friday, October 22, 2010
Obrigado!
Friday, October 22, 2010