1

ability.rb我有以下陈述:

if user.is_employee?
  can :schedule, Employee, id: user.employee.id
end

这应该允许员工查看他们自己的日程安排/employees/273/schedule。如果员工的 ID 为 273,则该 URL 将起作用。这有效……员工能够查看该 URL。问题是员工也可以查看所有其他 ID。上述不应该限制员工只安排他们自己的身份证吗?

更新:这是我的EmployeeController

class EmployeeController < ApplicationController
  before_filter :authenticate_user!
  authorize_resource
  def schedule
    @employee = Employee.find(params[:id])
  end
end
4

1 回答 1

1

authorize_resource从控制器中删除并在authorize! :schedule, @employee之后添加@employee = Employee.find(params[:id])

你的控制器

class EmployeeController < ApplicationController
  before_filter :authenticate_user!

  def schedule
   @employee = Employee.find(params[:id])
   authorize! :schedule, @employee
  end
end

那么在你的能力范围内.rb ...

if user.is_employee?
 can :schedule, Employee do |emp|
   user.employee.id == emp.id
 end
end
于 2013-09-12T03:48:23.590 回答