Uruchomiłem aplikację Railsową z Devise i CanCan. Mam użytkowników, którzy mają relację jeden-do-wielu do artykułów. Jestem nowy na kankana, oto co zamierzam zrobić:CanCan - Jak zezwolić użytkownikom na aktualizowanie i usuwanie tylko własnych obiektów
Administrator
- może wykonywać żadnych działań w artykułach
zalogowany użytkownik
- może czytać i tworzyć artykuły
- może edytować i zniszczyć jego własne teksty
Gość
- można przeczytać artykuły
Ale mam problemy ze zrozumieniem składni kankana. Rozumiem, że byłoby coś takiego.
def initialize(user)
user ||= User.new
if user.admin?
can :manage, Article
else
can :read, Article
end
end
Ale to tylko dla administratora i użytkownika guest, nie jestem pewien, jak odróżnić Gość od zalogowanego użytkownika, ponieważ tworzy nowy obiekt użytkownika, gdy użytkownik jest pusty. Widziałem, że kod powinien być podobny do tego can [:edit, :destroy], Article, :user_id => user.id
, ale nie jestem pewien, jak to by pasowało do metody initialize.
I ostatnie pytanie, jeśli zdefiniuję tylko can :read, Article
dla gości, czy zablokuje inne działania, takie jak tworzenie i aktualizowanie, jak biała lista akcji odczytu?
Każda pomoc zostanie doceniona. Wielkie dzięki!
Widok nie wygląda dobrze, ale nie jest powiązany z tematem pytania, który wydaje się dobrze pokryty z twoją zdolnością.rb. –
Używam samouczących się pomocników, takich jak link_to_edit, link_to_destroy, itd. Moi pomocnicy zawierają wywołanie can(), więc nie ma potrzeby umieszczania logiki wewnątrz widoków. –