Buenas tardes a todos,
tengo un pequeño problema y me gustarÃa que me comentaran cual podrÃa
ser la mejor solución:
Tengo una aplicación donde tengo el plugin restful_authenticacion
funcionando y los usuarios pueden darse de alta. Una vez validados,
pueden añadir artÃculos. Lo que necesito es que cada usuario sólo pueda
editar y/o eliminar sus artÃculos y no el de otros usuarios.
En tu controlador ArtÃculos tenes que cambiar las busquedas.
Por ejemplo en index, donde dice @articles = Article.find(:all) lo
cambias
por @articles = current_user.articles. En los otros metodos donde es
solo un
articulo cambias @article = Article.find(params[:id]) por @article =
current_user.articles.find(params[:id]).
def edit
begin @article = current_user. articles.find(params[:id])
rescue ActiveRecord::RecordNotFound
flash[:notice] = _(“The article that you request is no avaiable!”)
redirect_to root_path
rescue
flash[:notice] = _(“Sorry, but you don’t have permissions to edit
this article!”)
redirect_to root_path
end
end
supongo que para que eso sea realizable tienes que guardar el numero de
id
del usuario en el registro de la tabla articulos, osea crear un campo
que
haga la relación en user_has_many :articles, ¿o el plugin lo hace
automatico?
El método author_required lo defines aparte, y es el encargado de
comprobar que el post pertenece al usuario logueado.
Por ejemplo, si tu controlador de posts es también rest y lo haces de
manera anidada como en este tutorial [1], en el controlador de posts
estarás cogiendo el usuario al que pertenece y almacenándolo en @user.
Así que podrías comprobar que el usuario logueado con
restful_authentication, almacenado en current_user, es el mismo que @user, y si no, por ejemplo, redirigirlo a “/logout”, por malo.
def autor_required
if @user != current_user
redirect_to “/logout”
end
end
Feliz 2008 a todos
Gaston, parte de las buenisimas recomendaciones, tu puede servir
tambien para filtrar por usuario los conjuntos de resultados el metodo
“with_scope” del ActiveRecord.
El jue, 27 de dic de 2007, a las 06:50:51 +0100, Mario S. dijo:
Buenas tardes a todos,
tengo un pequeño problema y me gustaría que me comentaran cual podría
ser la mejor solución:
Tengo una aplicación donde tengo el plugin restful_authenticacion
funcionando y los usuarios pueden darse de alta. Una vez validados,
pueden añadir artículos. Lo que necesito es que cada usuario sólo pueda
editar y/o eliminar sus artículos y no el de otros usuarios.
¿Alguien conoce alguna solución elegante?
Has visto este plugin http://code.google.com/p/rolerequirement/
es muy simple y funciona con restful_authenticacion o
act_as_authenticacion
yo lo estoy usando, podés hacer cosas com estas:
class Admin::Listings < ApplicationController
require_role “contractor”
require_role “admin”, :for => :destroy # don’t allow contractors to
destroy