Ich habe eine Arbeitsfähigkeit wie folgt definiert:Cancancan verschachtelte Ressourcenautorisierungs
routes.rb
resources :projects do
resources :tasks
end
ability.rb
can [:manage], Project, invites: {supplier: {:user_id => user.id}}
can [:new, :create], Task
can [:update, :show, :destroy, :edit], Task, user_id: user.id
Aufgaben Controller:
load_and_authorize_resource :project
load_and_authorize_resource :task, :through => :project
Das lässt richtig zu Der Benutzer erstellt eine Aufgabe, wenn er zu einem Projekt eingeladen wird.
Ich möchte jedoch nicht, dass der Benutzer in der Lage ist: das Projekt zu verwalten. Ich brauche nur den Benutzer, um das Projekt wie folgt indizieren zu können.
ability.rb
can [:index], Project, invites: {supplier: {:user_id => user.id}} ## breaks when changing :manage to :index here
can [:new, :create], Task
can [:update, :show, :destroy, :edit, :index], Task, user_id: user.id
Als ich oben in den die Fähigkeiten setzen, kann der Benutzer keinen Zugriff mehr oder alle Aktionen auf die Aufgabe auszuführen. Wie erstelle ich eine Aufgabenfähigkeit über das Projekt, indem ich dem Projekt nur eine Indexfähigkeit gebe?
'extrahieren kann [: index], Projekt, lädt: {Lieferant: {user_id: user.id}}' - aber Sie wirklich an dem Punkt der Komplexität wo Pundit ist eine viel bessere Wahl als CanCanCan. – max
Wahr. Dies ist das letzte Stück, das ich für die Authentifizierung brauche. Sehen, ob ich eine Neuerstellung vermeiden kann. – HoosierCoder