Setup:Rails CanCanCan/Rolemodel/Canard: Begrenzung Benutzer nicht funktioniert
- Rails 5.1, Rubin 2.4.0
- User.rb aus Devise erstellt Erweitert mit CanCanCan und Canard (einschließlich Rolemodel)
- Sammlung has_many Artikel (МРnicht)
- Wunschliste has_many WishlistItems (die Arbeit)
KOMMT user.rb:
acts_as_user :roles => [ :guest, :user, :entity_admin, :admin, :super_admin ]
Diejenigen in einem roles_mask Feld in der Benutzertabelle gespeichert sind (Werte abbilden auf 1, 2, 4, 8, 16).
Auf der Admin und super_admin Ebenen, die Dinge gut funktionieren, aber es ist so weit offen definiert, so ist das zu erwarten:
manage[:all]
Auf der Benutzerebene, ist es auf Elemente beschränkt, die der Benutzer besitzt:
# app/abilities/users.rb
Canard::Abilities.for(:user) do
can [:read], :all
can [:manage], Collection do |collection|
collection.try(:user) == @user
end
can [:manage], Item, :collection => { user_id: user.id }
can [:manage], Wishlist do |wishlist|
wishlist.try(:user) == @user
end
can [:manage], WishlistItem do |wi|
wi.try(:user) == @user
end
end
ich habe auch versucht die einfachere Erklärung:
can [:manage], Collection, user_id: @user.id
ohne Erfolg.
In den Steuerungen werden die Dinge geladen und entsprechend zugelassen:
# app/controllers/collections_controller.rb:6
load_and_authorize_resource :collection, except: [:index, :show, :create]
# app/controllers/items_controller.rb:6-7
load_and_authorize_resource :collection
load_and_authorize_resource :item, through: :collection
#app/controllers/collections_controller Finder method from before_action
private
def set_collection
@collection = @user.collections.friendly.find(params[:id]).decorate
end
Also habe ich eine Sammlung erstellen können, und in der Konsole gehört es zu den richtigen Benutzer. Ich erhalte jedoch einen CanCan-Fehler, wenn ich versuche, Änderungen daran vorzunehmen ("Sie sind nicht berechtigt, auf diese Seite zuzugreifen."). Das Hinzufügen eines Elements schlägt automatisch fehl.
Ich bin sicher, das ist ein Benutzerfehler meinerseits, aber ich kann es nicht für das Leben von mir herausfinden.
so ... was ist dein Fehler/Problem? – MrYoshiji
fett den Fehler –