、 、およびモデルがUser
ありProduct
ますSubscription
。基本的に、サブスクリプションは特定の製品に対するものであり、製品は複数のサブスクリプションを持つことができ、各製品はユーザー (つまり、作成者) に属します。ユーザーは、管理者または通常のユーザーです。
私の質問は、通常のユーザーが自分が作成した製品のサブスクリプションのみを作成できるようにしたい場合、cancan を使用してこれをどのように実装すればよいですか?
これは、現在私のability.rbにあるものです。
class Ability
include CanCan::Ability
def initialize(user)
if user
if user.admin?
can :manage, :all
else # not an admin
can :read, User
can :manage, User, id: user.id
cannot :create, User
can :read, Product
can :manage, Product, user: user
can :read, Subscription
# this is sort of what I want, but now nobody can create subscriptions
can :create, Subscription, product: { user: user }
can :manage, Subscription, product: { user: user }
end
else # not a user, just a guest
can :create, User
can :read, User
can :read, Product
can :read, Subscription
end
end
end
私はこれについて完全に間違っていますか?コントローラーでこれを行うか、代わりに何らかの検証を使用する必要がありますか?