1

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

那么,只有当他是母车的所有者时,我才如何限制用户编辑 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 文档一致,但我哪里出错了?

4

2 回答 2

2

可能有更短的方法来编写它,但这会起作用:

can :manage, Timeslip do |timeslip|
     timeslip.car.user_id == user.id
end
于 2013-01-20T17:47:24.467 回答
0

这对我有用:can :manage, Timeslip, car: { roles: { id: user.role_ids } }

于 2017-11-29T16:22:27.927 回答