0

以下が条件です

私は1 に属し、同様usersに 1に属します。workcategorywork

今、私はその特定の作品のユーザーを、その作品にedit属するカテゴリーに入れたいと思っています。

abilityこれをモデルで指定するにはどうすればよいですか?

編集 :

include CanCan::Ability

def initialize(user)

user ||= User.new # guest user

user.roles.each do |role|

role.name

if role.name == "admin"

    can :read, User

    can :create, User

    can :edit, User

    can :destroy, User

end

if role.name == "staff"

         can :read, :all

         can :create, :all

        cannot :edit, Category

        can :update, :all

        can :destroy, :all

       end

    if role.name == "others"

          can :read, :all

   end   

end 

end 

end
4

2 に答える 2

0

能力クラスでは、ユーザーのみを渡します。そのためには、カテゴリも渡す必要があります。

can :manage, Category if user.work_id == category.work_id  

または、このように繰り返す必要があります(お勧めしません)、

can :manage, Category if user.work_id == user.work.categories.first.work_id  

このリンクは、複数のパラメータをアビリティ クラスに送信する方法を示しています。

https://github.com/ryanb/cancan/wiki/Accessing-Request-Data

于 2013-03-29T08:48:34.947 に答える
0

テストされていませんが、これでうまくいくはずです:

can :manage, Category, :work_id => user.work_id

参照: https://github.com/ryanb/cancan/wiki/defining-abilities

于 2013-03-29T08:09:06.767 に答える