Rails当前用户最佳实践



我在一个dilema上,有很多对象与我的应用程序上的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

这种情况还在继续。提前感谢

如果你使用House.find(params[:id]),你会有一个潜在的安全漏洞,因为给定的用户只需更改url中的数字,就可以为另一个用户访问房子。因此,如果你走这条路,你必须添加一些东西来保护未授权访问。

OTOH,current_user.house将它们保留在自己的房子里,但需要用于管理功能的替代代码。

对于简单的应用程序,您可以手动完成,但对于较大的应用程序来说,您可能需要考虑授权框架,如cancan或declarative_authorization,在这些框架中您可以更容易地定义权限。

我自己使用decl_auth,我的所有控制器要么使用filter_resource_access加载资源的方法(加载适当的资源,如果不允许,则抛出并出错),要么手动使用House.with_permissions_to(:index),只有当我有权加载它时,它才会给我一个房子。

和往常一样,Railscasts说得最好:cancan和声明性授权。

最新更新