我的协会如下:
User has_many :employees
Employee belongs_to :user
Ticket has_many :employees
我的路线是正常的而不是那些模型的嵌套, 如何为分配的员工编写能力?
注意用户ID与员工ID
不同ability.rb
if user.has_role? :ticket_manager
can :manage, Ticket, :employee_id => #how to match the employee.id
end
答案 0 :(得分:1)
我猜你可以这样做:
if user.has_role? :ticket_manager
can :manage, Ticket do |ticket|
ticket.employees.map(&:user_id).include?(user.id)
end
end
但是,如文档https://github.com/ryanb/cancan/wiki/Defining-Abilities-with-Blocks中所述,请注意,这只适用于存在实例对象的情况。例如,在检查索引权限时,不会评估该块。