Rails current_user最佳实践

时间:2012-03-22 12:23:42

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 rubygems

我正处于困境,我的应用上有一大堆与current_user关联的对象。并且不知道在我的控制器中是否继续使用ID来查找这些对象或直接放入current_user +对象。

例:

class HousesController < ApplicationController

 def show
      @house = House.find(params[:id]) **or?** @house = current_user.house 
    end

 def edit
      @house = House.find(params[:id]) **or?** @house = current_user.house 
    end
end

这一直在继续。谢谢你提前

1 个答案:

答案 0 :(得分:4)

如果你使用House.find(params[:id]),你就会有一个潜在的安全漏洞,因为给定的用户可以简单地更改网址中的数字并访问不同用户的房屋。因此,如果你走这条路,你必须添加一些东西来保护无法访问。

OTOH,current_user.house将他们留在自己的房子里,但需要管理员职能的替代代码。

对于简单的应用程序,您可以手动执行此操作,但对于较大的应用程序,您可能需要考虑授权框架,例如cancandeclarative_authorization,您可以更轻松地定义权限。

我自己使用decl_auth,并且我的所有控制器都使用其加载资源filter_resource_access的方法(加载适当的资源或者抛出错误,如果不允许)或者用House.with_permissions_to(:index)手动加载{{1}}如果我有权加载它,只给我一个房子。

与往常一样,Railscasts最好说:cancandeclarative authorization