我的控制器中有一个如下所示的操作:
def show
@user = User.find(params[:user_id])
# ... more stuff.
end
注意,由于CanCan尝试使用params[:id]
加载,我在覆盖资源的加载,我需要在此使用params[:user_id]
。
我的控制器顶部定义了以下内容:
authorize_resource :only => [:show]
在Ability.rb中:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
can :show, User if :id == user.id
end
end
然而,我的所有调用都是未经授权的。我正在使用设计进行身份验证,我正在验证传递给initialize的user
对象确实是登录用户。如何验证登录的user
是否只能查看他们要求的配置文件而不能查看其他配置文件?
答案 0 :(得分:1)
您没有覆盖资源的加载,因为这是在操作之前发生的:
authorize_resource :only => [:show]
相反,您需要删除它并将授权添加到您的操作或单独的before_filter。
def show
@user = User.find(params[:user_id])
authorize! :show, @user