quinta-feira, 8 de janeiro de 2009

Utilizando restful_authorization e restful_authentication

1

Esse tema estava no rails-br, e tinha um comentario de que faltavam documentos em português explicando o uso desses dois excelentes plugin para rails.

O que são e o que fazem?
o restful_authentication é um plugin que faz o login de um usuário de acordo com o uma tabela no banco.
e o restful_authorization é um plugin que funciona com o authentication, ele ministra as regras de authenticação de um usuário, as permissões de acesso.

Instalando
Você não precisa do authorization caso deseje somente um login.
para instalar vamos instalar apartir do github, faça o dowload do git, para o seu sistema operacional, como uso Ubuntu, para quem usa também basta utilizar


sudo apt-get install git-core

agora basta criar uma aplicação em rails, levando em consideração que já deve ter o ruby, rails e git instalados.

rails teste

agora vamos instalar nossos plugins, quando se instala um plugin do github, ele cria um repositorio git, onde vc pode atualizar seu plugin sem problemas, vamos ao que insteressa, instalando os plugins

script/plugin install git://github.com/technoweenie/restful-authentication.git

script/plugin install git://github.com/jbarket/restful-authorization.git

Na pasta teste/vendor/plugins, foram adicionadas duas pastas os nossos queridos plugins.

Agora a unica coisa que precisamos é chamar os respectivos generators, no restful-atuthorization o README esta com problemas, pois o generator dele esta com nome diferente, apenas um pequeno detalhe.

vamos criar então nosso model de autenticação

script/generate authenticated user sessions

explicando detalhadamente esse comando, estamos gerando um model chamado user, e um controller chamado sessions, o model user, vai ser nosso modelo em tabela para fazer o login, e o controller sessions, vai ser o responsavel pelos logins e logouts.

Apos rodar o generator ele adiciona algumas rotas ao seu routes.rb


map.logout '/logout', :controller => 'sessions', :action => 'destroy'
map.login '/login', :controller => 'sessions', :action => 'new'
map.register '/register', :controller => 'users', :action => 'create'
map.signup '/signup', :controller => 'users', :action => 'new'

você pode usar logout_path nos controllers, logout_url nas views etc.

para utilizar em algum controller as validações vc tem que adicionar um include no seu controller



include AuthenticatedSystem


Após fazer fazer isso vc pode usar self.current_user que vai lhe retornar o usuário logado atualmente.

para abrir a tela de registro de usuário utilize localhost:3000/singup e pode se registrar e criar uma conta, e em localhost:3000/login

tem um metodo que ajuda muito é o logged_in?, pode ser usado para verificar se um usuário está logado. por exemplo em um before_filter em um controler, ou em uma view para verificar se o usuário esta logado.


Utilizando o Restful-Authorization

O restful-authorizaiton, esta com um problema no README, pois o generator esta com nome diferente, mas nada que va estragar seu sono.
Para gerar as autorizações precisamos de alguns parametros


script/generate authorized role user


São dois simples parametros que devemos utilizar, um deles é o novo modelo, o role, que vai manter as regras da aplicação, é um model bem simples. O segundo parametro é o model que pertence ao restful-authentication, que nós criamos acima.

Após rodar o comando acima, se abrirmos nossa classe user, veremos que alguns detalhes foram adicionados nela


has_and_belongs_to_many :roles



# has_role? simply needs to return true or false whether a user has a role or not.

# It may be a good idea to have "admin" roles return true always

def has_role?(role_in_question)

@roles_list ||= self.roles.collect(&:name).collect(&:downcase)

return true if @roles_list.include?("admin")

(@roles_list.include?(role_in_question.downcase.to_s))

end


um novo metodo (has_role?) foi criado na classe e podemos utilizado para os usuário, ele verifica se o usuário possui alguma role, percebem a detalhe, já tem uma validação caso a role seja admin, que por padrão ira permitir tudo ao usuario.

Em qualquer lugar da apliçao que você possa chamar o self.current_user (veja mais acima), também poderá chamar o metodo has_role?

Ex:
self.current_user.has_role?("financeiro")

retornará true se o usuário atual tem a regra financeiro.

Essa segunda parte, eu nunca testei, mas segundo README no github do restful-authorization você pode deixar ele mesmo filtrar pelas regras adicionando em algum controle o comando:


authorized_role :financeiro


e assim ele vai validar se o usuário possui a role determinada no controller.

Muito util e simples.
Espero que tenha ajudado

Até a próxima

[]'s

1 comentários:

Adriano disse...

Fala Rafael boa tarde...

Rapaiz, bacana seu post. Obrigado por ser mais uma pessoa que ajuda a comunidade rails.

Abraços

 
Design by ThemeShift | Bloggerized by Lasantha - Free Blogger Templates | Best Web Hosting