Rails 基于关联的 cancan 授权被拒绝

Rails cancan authorization based on association being denied

我的 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。

在 tasks show 方法中,我有这个片段来授权和 return 数据:

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

    authorize! :read, @current_user

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

为什么会被拒绝?

您需要授权任务,而不是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