O primeiro plugin que vou exemplificar aqui eh o Act as Authenticated. Toda aplicacao web que se preze usa um sistema de autenticacao, e isso sempre envolve login, logout, usuario na sessao, propriedade do usuario sobre o conteudo, etc.
Act as Authenticated eh um otimo plugin para este fim, ja que ele quebra um galho na hora de desenvolver a parte de autenticacao de usuarios na sua aplicacao web.
Vocês vão perceber que eu vou sempre criar um projeto novo para cada plugin, pra demonstrar como funciona sua instalação e utilização desde o princípio. No nosso casso, vamos imaginar um probelma comum, onde precisamos de um sistema para gerenciamento de tarefas, com autenticação de usuários.
Primeiro vamos entao criar o projeto:
rails supertasks
cd supertasks
rake db:create
(Just in case: Lembrem-se de editar o databases.yml se estiverem trabalhando com outro banco alem do padrao, sqlite)
Agora eh hora de instalar o plugin:
script/plugin install http://svn.techno-weenie.net/projects/plugins/acts_as_authenticated
Uma vez que o plugin ja esta instalado, podemos gerar o codigo de autenticacao. Para isto, vamos considerar a classe User para representar nossos usuarios, e como controller de autenticacao vamos usar o nome SessionsController. Neste caso, basta executar o script abaixo para gerar o codigo e o comportamento de autenticacao na sua aplicacao:
ruby script/generate authenticated user sessions
Onde user se refere a nossa classe e login, o controller de autenticacao.
Considerando que voce quer confirmar a autenticacao do usuario por toda sua aplicacao, e preciso incluir o pacote que contem esta funcionalidade no seu ApplicationController (application.rb):
class ApplicationController < ActionController::Base
helper :all # include all helpers, all the time
include AuthenticatedSystem
Como nosso sistema vai conter tarefas, vamos criar um scaffold para o gerenciamento das mesmas:
script/generate scaffold task title:string content:text finished:boolean
Nos ainda precisamos adicionar a relacao do usuario com a tarefa, mas para isto vamos adicionar o user_id em uma migration separada. Nao colocamos antes no scaffold para evitar ter que mudar os templates para remover os campos referentes a user_id.
script/generate migration add_user_id_to_tasks
E edite o arquivo de migracao que foi gerado, para conter o novo campo:
def self.up
add_column :tasks, :user_id, :integer, :default => 0
end
def self.down
remove_column :tasks, :user_id
end
Eh hora de modificar as classes User e Task para criar a relacao entre ambas:
app/models/user.rb:
class User < ActiveRecord::Base
has_many :tasks
# Virtual attribute for the unencrypted password
attr_accessor :password
# Resto do codigo gerado...
app/models/task.rb:
class Task < ActiveRecord::Base
belongs_to :user
end
Vamos adicionar o before_filter no nosso controller para gerenciamento de tarefas, para garantir que nosso usuario existe na sessao antes de qualquer atividade com as mesmas:
app/controllers/tasks_controller.rb
class TasksController < ApplicationController
before_filter :login_required
Act as Authenticated disponibiliza o usuario atual em qualquer lugar, na variavel current_user. Isto eh otimo pois podemos acessar o usuario atual e garantir que as tarefas apresentadss no gerenciamento pertencem realmente aquele usuario. Para isso, devemos modificar nosso controller de artigos novamente:
class TasksController < ApplicationController
before_filter :login_required
def index
#@tasks = Task.find(:all)
@tasks = current_user.tasks
# mais codigo...
def show
#@task = Task.find(params[:id])
@task = current_user.tasks.find(params[:id])
#mais codigo...
def new
#@task = Task.new
@task = current_user.tasks.new
#mais codigo...
def edit
#@task = Task.find(params[:id])
@task = current_user.tasks.find(parmas[:id])
#mais codigo...
def create
#@task = Task.new(params[:task])
@task = current_user.tasks.new(params[:task])
#mais codigo...
def update
#@task = Task.find(params[:id])
@task = current_user.tasks.find(params[:id])
#mais codigo...
def destroy
#@task = Task.find(params[:id])
@task = current_user.tasks.find(params[:id])
#mais codigo
Com o controller criado, agora precisamos de uma pagina principal. Antes de cria-la, vamos remover o arquivo index.html dentro do diretorio public:
rm public/index.html
E criar um controller principal (Main), com apenas uma action: index
script/generate controller main index
Claro, nao podemos esquecer de definir nosso root controller em config/routes.rb:
map.root :controller => “main”
Finalmente, antes de comecar a utilizar nosso sistema, vamos dar uma cara para a nossa pagina principal. Crie o arquivo index.html.erb dentro do diretorio app/views/main:
Bem Vindo,
Vamos editar o controller de Login agora, para garantir que sempre sejamos redirecionados para nossa pagina principal. Troque, em todos os lugares onde aparece o redirecionamento para o proprio controller:
redirect_back_or_default(:controller => '/sessions', :action => 'index')
para redirecionar para nosso main controller:
redirect_back_or_default(:controller => '/main', :action => 'index')
Bom, agora eh so cruzar os dedos :-), rodar os migrations e subir o server:
rake db:migrate
ruby script/server
Bom, eh isso! Espero que sirva de ajuda para muitos projetos.
Ate a proxima!
quinta-feira, 2 de outubro de 2008
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário