我有一个数据库设置,其中有许多用户,这些用户具有成员或管理员的角色。每个用户有很多辆车。每辆车都有很多次
那么,只有当用户是母车的车主时,我该如何限制用户编辑 Timeslip 的能力。
在 CanCan 中:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.has_role? :admin
can :manage, :all
elsif user.has_role? :member
can :manage, Car, :user_id => user.id
can :manage, Timeslip, :car => {:user_id => user.id}
end
end
end
can :manage, Timeslip, :car => {:user_id => user.id}
这行是我需要帮助的地方。
因为 Timeslip 是 Car 的关联/子项,我需要检查其父项 car.user_id = Cancan user.id
我认为我的写法符合 CanCan 文档,但我哪里出错了?
最佳答案
可能有更短的写法,但这行得通:
can :manage, Timeslip do |timeslip|
timeslip.car.user_id == user.id
end
关于ruby-on-rails - 使用 CanCan,我如何根据关联/子属性限制能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14427053/