SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
Autorização com CanCan
Rafael 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 Objects
Objects são os objetos acessados pelo Subject.
Friday, October 22, 2010
Métodos do Subject
A 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 Object
A 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

Más contenido relacionado

Similar a Autorização com CanCan

Path to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoTPath to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoTAmazon Web Services LATAM
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanLucas Amaral
 
(Re)pensando a OOP - PHPDay Curitiba 2013
(Re)pensando a OOP - PHPDay Curitiba 2013(Re)pensando a OOP - PHPDay Curitiba 2013
(Re)pensando a OOP - PHPDay Curitiba 2013Luís Cobucci
 
Java Básico - Módulo 07: Introdução à programação orientada à objetos
Java Básico - Módulo 07: Introdução à programação orientada à objetos Java Básico - Módulo 07: Introdução à programação orientada à objetos
Java Básico - Módulo 07: Introdução à programação orientada à objetos Professor Samuel Ribeiro
 
PHP: Programando com orientação a Objetos
PHP: Programando com orientação a ObjetosPHP: Programando com orientação a Objetos
PHP: Programando com orientação a ObjetosPablo Dall'Oglio
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)Ricardo Valeriano
 
Web2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com PythonWeb2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com Pythonchackero
 
Google App Engine e NoSQL: Alta disponibilidade
Google App Engine e NoSQL: Alta disponibilidadeGoogle App Engine e NoSQL: Alta disponibilidade
Google App Engine e NoSQL: Alta disponibilidadeGiovane Liberato
 

Similar a Autorização com CanCan (15)

Path to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoTPath to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoT
 
Java script aula 07 - j-query
Java script   aula 07 - j-queryJava script   aula 07 - j-query
Java script aula 07 - j-query
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando Postman
 
(Re)pensando a OOP - PHPDay Curitiba 2013
(Re)pensando a OOP - PHPDay Curitiba 2013(Re)pensando a OOP - PHPDay Curitiba 2013
(Re)pensando a OOP - PHPDay Curitiba 2013
 
v
vv
v
 
Java Básico - Módulo 07: Introdução à programação orientada à objetos
Java Básico - Módulo 07: Introdução à programação orientada à objetos Java Básico - Módulo 07: Introdução à programação orientada à objetos
Java Básico - Módulo 07: Introdução à programação orientada à objetos
 
Java script aula 09 - JQuery
Java script   aula 09 - JQueryJava script   aula 09 - JQuery
Java script aula 09 - JQuery
 
PHP: Programando com orientação a Objetos
PHP: Programando com orientação a ObjetosPHP: Programando com orientação a Objetos
PHP: Programando com orientação a Objetos
 
10 - JS OOP.pptx
10 - JS OOP.pptx10 - JS OOP.pptx
10 - JS OOP.pptx
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)
 
Sua primeira app iOS
 Sua primeira app iOS Sua primeira app iOS
Sua primeira app iOS
 
Melhorando seu App com Kotlin e Testes
Melhorando seu App com Kotlin e TestesMelhorando seu App com Kotlin e Testes
Melhorando seu App com Kotlin e Testes
 
Workshop Django
Workshop DjangoWorkshop Django
Workshop Django
 
Web2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com PythonWeb2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com Python
 
Google App Engine e NoSQL: Alta disponibilidade
Google App Engine e NoSQL: Alta disponibilidadeGoogle App Engine e NoSQL: Alta disponibilidade
Google App Engine e NoSQL: Alta disponibilidade
 

Autorização com CanCan