ruby on rails -使用CanCan,如何限制基于关联/子属性的能力



我有一个数据库设置,其中有许多用户,其中有成员或管理员的角色。每个用户都有很多辆车。每辆车都有多个时间点

那么,如果用户是父车的所有者,我如何限制他编辑Timeslip的能力呢?

在康康舞:

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

这就是我的工作:can :manage, Timeslip, car: { roles: { id: user.role_ids } }

相关内容

  • 没有找到相关文章

最新更新