1

メンバーまたは管理者の役割を持つ多くのユーザーがいるデータベース設定があります。各ユーザーは多くの車を所有しています。各車には多くのタイムスリップがあります

では、ユーザーが親車の所有者である場合にのみタイムスリップを編集できるように制限するにはどうすればよいでしょうか。

カンカンで:

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 に答える