声明式授权似乎需要 params[:id] 进行验证,我想使用 /profile 和 /dashboard 等用户存储在会话中的路径,而不是 URL。但它打破了。关于如何在不破解 gem 本身的情况下做到这一点的任何想法?
4 回答
声明式授权似乎需要 params[:id] 进行验证
仅当您依赖于filter_resource_access
在控制器中设置实例变量时,这才是正确的。您可以通过指定来设置自己的授权方案filter_access_to
。这允许您设置自己的自定义方法,这些方法可以基于您喜欢的任何内容——会话变量、模型属性等。
本简介中的控制器部分解释filter_access_to
并给出了一些示例。
如果您的应用程序中有用户,为什么不使用身份验证插件?我使用 Restful 身份验证,并通过一些工作完成了会话管理。对于您的问题,此插件有一个辅助方法current_user
,可以检索已打开会话的用户。
我认为它比实现您的解决方案更好地依赖于 Restful Authentication(或 AuthLogic 之类的响应#1)之类的插件,但是您会更好地了解自己的需求;)
使用设计,这样你就可以得到一个current_user
方法。
使用filter_access_to
而不是filter_resource_access
.
我使用 AuthLogic,但据我所知,“current_user”不会通过路由访问。
您需要在控制器中检查 params[:id] == "current_user" (作为字符串),然后基于此执行一些逻辑......即:
if params[:id] == "current_user"
@user_id = current_user.id
else
@user_id = params[:id]
end
@user = User.find(@user_id)
一个非常简单的示例,但它应该说明从自定义路由获取 current_user 所需的逻辑类型。您也可以仅将 current_user 的命名路由映射到它自己的控制器操作,但这不是非常 RESTful,并且 [很可能] 会重复您已经拥有的功能。