Ich bin ein wenig verwirrt darüber, wie man CanCanCan richtig konfiguriert.Wie richte ich meine CanCanCan-Berechtigungen richtig ein?
Für den Anfang, muss ich hinzufügen load_and_authorize_resource
zu jeder Controller-Ressource, die ich den Zugriff beschränken möchte?
Dies ist, was würde ich tun:
- Admin verwalten und alle Controller und Aktionen alle
- Editor lesen zugreifen können, verwalten: Nachrichten, und können alle Beiträge
- Mitglied verwalten können jeden Beitrag lesen und kann & Update-Beiträge erstellen (nicht bearbeiten/löschen/irgendetwas anderes), kann nicht auf den Newsroom zugreifen. Der Unterschied zwischen einem Update-Post & in unseren Geschäftsregeln besteht darin, dass ein Update einen neuen Post erstellt, der ein untergeordneter Post des aktuellen Posts ist. Es ist also keine Bearbeitung. Nur ein neuer Rekord mit einer Vorfahrenvereinigung.
- Gäste können jeden Beitrag lesen, aber keine Beiträge erstellen oder auf den Newsroom zugreifen.
Dies ist, was mein ability.rb
wie folgt aussieht:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
#Admin
if user.has_role? :admin
can :manage, :all
can :manage, :newsroom
# Editor
elsif user.has_role? :editor
can :read, :all
can :manage, :newsroom
can :manage, Post
#Member
elsif user.has_role? :member
can :read, :all
can :create, Post
can :status, Post
can :update, Post do |post|
post.try(:user) == user
end
#Guest
else
can :read, :all
can :create, Post
can :status, Post
end
end
end
In meinem routes.rb
Ich habe dies:
authenticate :user, lambda { |u| u.has_role? :admin or :editor } do
get 'newsroom', to: 'newsroom#index', as: "newsroom"
get 'newsroom/published', to: 'newsroom#published'
get 'newsroom/unpublished', to: 'newsroom#unpublished'
end
Was allerdings passiert, ist, wenn ich mit einem Benutzer bin angemeldet, dass Mir wurden keine Rollen zugewiesen (dh ich möchte ein "Gast" sein), sie können auf den Newsroom zugreifen.
Wenn ich versuche, einen Beitrag mit der Rolle :member
zu bearbeiten, gibt es mir einen Fehler "nicht autorisiert, Beitrag zu bearbeiten" (was korrekt ist).
Ich kann einfach nicht ganz die Newsroom
sperren und ich bin mir nicht sicher warum.
Außerdem kann @marcamillion die Authentifizierung in den Routen löschen, da CanCanCan den Zugriff auf den Newsroom verweigert, wenn 'can: read,: all' aus dem Guest entfernt wird. Gut um Duplikate zu entfernen. – Tim
Ich möchte, dass ein Gast alle Beiträge lesen, Beiträge verfassen und Statusbeiträge schreiben kann. Aber ich möchte nicht, dass sie auf den 'Newsroom' zugreifen können und ich möchte nicht, dass sie irgendwelche' Post' bearbeiten/aktualisieren/löschen können. – marcamillion