Rails可以根据关联被拒绝授权

时间:2015-03-03 19:43:46

标签: ruby-on-rails ruby cancan

我的ability.rb文件中包含以下代码段:

def initialize(user)
  if user.group === 1
    can :manage, Task do |task|
      task.user.id === user.id
    end
  end 
end

用户has_many任务和每个任务belongs_to用户。请求的任务记录(7)的user_id为4.发送请求的用户的user_id为4.

在任务show方法中,我有这个片段来授权并返回数据:

def show
    @task = Task.find(params[:id])

    authorize! :read, @current_user

    render json: @task, root: "task"
end

为什么会被拒绝?

1 个答案:

答案 0 :(得分:1)

您需要授权该任务,而不是current_user。假设current_user:

def show
  @task = Task.find(params[:id])

  authorize! :read, @task

  render json: @task, root: "task"
end

在您的能力文件中,您可以这样写:

def initialize(user)
  can :manage, Task do |task|
    task.user.id == user.id && user.group == 1
  end
end 
相关问题