autorização com cancan
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.TRANSCRIPT
![Page 1: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/1.jpg)
Autorização com CanCanRafael Carvalho
@rafaeldx7
Friday, October 22, 2010
![Page 2: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/2.jpg)
Objetivo
• Abordar as funcionalidades do CanCan
• Fazer um comparativo com o Acl9.
Friday, October 22, 2010
![Page 3: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/3.jpg)
O que é CanCan?
É uma ferramenta de autorização para aplicações Rails.
É fornecida como uma rubygem ou plugin.
Friday, October 22, 2010
![Page 4: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/4.jpg)
Autorização ≠ Autenticação
Friday, October 22, 2010
![Page 5: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/5.jpg)
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
![Page 6: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/6.jpg)
O CanCan não faz isso!
Friday, October 22, 2010
![Page 7: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/7.jpg)
O Acl9 não faz isso!
Friday, October 22, 2010
![Page 8: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/8.jpg)
Autenticação para Rails
• Devise
• AuthLogic
• Restful Authentication
• Clearance
Friday, October 22, 2010
![Page 9: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/9.jpg)
Autorização para Rails
• CanCan
• Acl9
• Declarative Authorization
• Role Requirement
Friday, October 22, 2010
![Page 10: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/10.jpg)
Visão geral do Acl9
Friday, October 22, 2010
![Page 11: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/11.jpg)
Acl9 é baseado em papéis (roles)
E uma tabela roles referente a esse model.
Friday, October 22, 2010
![Page 12: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/12.jpg)
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
![Page 13: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/13.jpg)
Authorization ObjectsObjects são os objetos acessados pelo Subject.
Friday, October 22, 2010
![Page 14: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/14.jpg)
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
![Page 15: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/15.jpg)
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
![Page 16: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/16.jpg)
Definindo as Regras de Acesso
Friday, October 22, 2010
![Page 17: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/17.jpg)
Visão Geral do CanCan
Friday, October 22, 2010
![Page 18: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/18.jpg)
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
![Page 19: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/19.jpg)
Classe de Permissões
Friday, October 22, 2010
![Page 20: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/20.jpg)
Testando as Permissões
Friday, October 22, 2010
![Page 21: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/21.jpg)
Autorizando as Actions
Friday, October 22, 2010
![Page 22: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/22.jpg)
Mostrando Links
Esse método can? será chamado para o current_user.
Friday, October 22, 2010
![Page 23: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/23.jpg)
Comparativo
Friday, October 22, 2010
![Page 24: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/24.jpg)
Model no Acl9
Friday, October 22, 2010
![Page 25: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/25.jpg)
Model no CanCan
Nada.
Friday, October 22, 2010
![Page 26: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/26.jpg)
Model no CanCan
A menos que seja necessário criar papéis.
Friday, October 22, 2010
![Page 27: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/27.jpg)
Controller no Acl9
Friday, October 22, 2010
![Page 28: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/28.jpg)
Controller no CanCan
Friday, October 22, 2010
![Page 29: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/29.jpg)
Flexibilidade no CanCan
Friday, October 22, 2010
![Page 30: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/30.jpg)
Vantagens do CanCan
• Simplicidade é essencial
• Flexibilidade é necessária
• Centralização das regras é interessante
O CanCan é uma boa opção quando:
Friday, October 22, 2010
![Page 31: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/31.jpg)
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
![Page 32: Autorização com CanCan](https://reader030.vdocuments.site/reader030/viewer/2022020122/556668b4d8b42aa21e8b51c2/html5/thumbnails/32.jpg)
Obrigado!
Friday, October 22, 2010