Implementando la gestión de usuarios

Sin lugar a dudas, Dani ya os puso sobre la pista de nuestra idea de la gestión de usuarios en cuanto a Flatee. Y de qué manera era necesario tenerla. De tal forma que no voy a entrar en esto, sino más bien en cómo la estamos implementando.

Siguiendo el principio DRY, hemos utilizado el ya ampliamente conocido plugin restful_authentication. Desde hace algún tiempo este plugin se encuentra alojado en github, lo que ha servido para que algunos miembros del equipo trabajen con git, un añadido más.

Nuestra primera misión fue instalar git en nuestras máquinas para poder funcionar con él. En mi caso, ha sido bastante sencillo hay disponible una imagen para instalar en Mac OS X, por lo que la instalación ha sido un click detrás de otro, un simple reinicio del terminal y funcionando.

Luego para descargar el plugin desde github con git, nos basta con:

git clone git://github.com/technoweenie/restful-authentication.git vendor/plugins/restful-authentication

Por otro lado al descargar la versión de restful_authentication, dado que es la última sufrimos algunos problemas, que os queremos detallar.

Lo fundamentarl ahora es generar con el plugin nuestra cuenta de usuario:

./script/generate authenticated user sessions --include-activation --stateful --rspec

las opciones que incluimos detalladas nos dan:

  • include-activation: con esto se generará un ActionMailer que nos permitirá enviar el mail de activación a los usuairos implicados.

  • stateful: da soporte al plugin: acts_as_state_machine que generara el código de activación.

  • rspec: Genera test Rspec y Stories en lugar de los tradicionales test de rails.

Existen más posibilidades, sin embargo para nosotros estas eran las necesarias.

Tras ejecutar esto, el plugin nos recomienda una serie de pasos a seguir, el primero de ellos, debemos añadir un observer al config/environment.rb:

config.active_record.observers = :user_observer

Lo siguiente es instalar acts_as_state_machine, para ello:

svn export http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk vendor/plugins/acts_as_state_machine

Debemos añadir las siguientes rutas a config/routes.rb:

map.signup '/signup', :controller => 'users', :action => 'new'
map.login  '/login',  :controller => 'sessions', :action => 'new'
map.logout '/logout', :controller => 'sessions', :action => 'destroy'
map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate', :activation_code => nil

y modificar la existente creada por el plugin de usuarios:

map.resources :users, :member => { :suspend => :put, :unsuspend => :put, :purge => :delete }

Al modelo de usuario hay que añadirle los estados que va a utilizar el plugin acts_as_state_machine:

acts_as_state_machine :initial => :pending
state :passive
state :pending, :enter => :make_activation_code
state :active,  :enter => :do_activate
state :suspended
state :deleted, :enter => :do_delete

Como nota importante, decir que tuvimos que añadir unas líneas al init.rb del plugin, por unos errores que obteníamos de métodos ‘undefined’:

require File.dirname(FILE) + ‘/lib/authorization’
require File.dirname(FILE) + ‘/lib/authorization/stateful_roles’

Tras esto enviamos un mail al autor del plugin, por lo que consideramos es un error para que pudiese incluirlo en el repositorio y quedase corregido.

2 Respuestas a “Implementando la gestión de usuarios”


  1. 1 xamba

    Todo genial, salvo esto “por lo que la instalación a sido un click detrás de otro, un simple reinicio del terminal y funcionando” por favor, revisad la ortografía… HA sido… lleva h…

  2. 2 dani

    Ups! Muchas gracias xamba, se nos había pasado.

Añade un Comentario