Rails:使用CanCan gem问题授权用户

时间:2011-08-27 20:41:57

标签: ruby-on-rails ruby cancan

我的控制器中有一个如下所示的操作:

  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是否只能查看他们要求的配置文件而不能查看其他配置文件?

1 个答案:

答案 0 :(得分:1)

您没有覆盖资源的加载,因为这是在操作之前发生的:

authorize_resource :only => [:show]

相反,您需要删除它并将授权添加到您的操作或单独的before_filter。

def show
  @user = User.find(params[:user_id])
  authorize! :show, @user