2017-12-12 1 views
0

Ich versuche, bestimmte Zugriffsbeschränkungen für meine Website einzurichten, was bedeutet, dass ich die Admin, um andere Seiten als der normale Benutzer zu sehen. Ich habe Gerät für die Benutzerauthentifizierung verwendet und kann die Zugriffsbeschränkung einsehen. Leider bin ich nicht ganz sicher, wie man es mit cancancan umsetzt.Ruby on Rails5/cancancan/devise - Implementieren von Zugriffsbeschränkungen für verschiedene Benutzer (dh Benutzer A sieht andere Seiten als Benutzer B)

Ich markierte die Benutzer, indem Sie ihnen 2 verschiedene Rollen (booleans) - admin und Wohltätigkeitsorganisation zuweisen. Grundsätzlich möchte ich, dass der Administrator auf Seite A landet, wenn er sich anmeldet, und er sollte auch Zugang zu Seite B und C (und dem rails_admin) haben. Der Charity-Benutzer sollte auf Seite D landen und Zugang zu Seite E und F. hat

ich das Hinzufügen versuchte den folgenden Code app/Modell/ability.rb aber leider ohne Erfolg:

user ||= User.new # guest user (not logged in) 
if user.admin_role? 
    can :manage, :page A 
    can :manage, :page B 
    can :manage, :page C 
    can :access, :rails_admin  # only allow admin users to access Rails Admin 
end 
if user.charity_role? 
    can :manage, page D 
    can :manage, page E 
    can :manage, page F 
end 

Weiß jemand, was ich ändern soll? Und wie stelle ich sicher, dass der Administrator auf Seite A landet und die Charity auf der Seite D landet, nachdem er sich eingeloggt hat?

Ich wäre dankbar für jede Hilfe!

+0

Wo Sie 'Seite X' haben in der Regel ein Objekt der Klasse sein soll, dass Sie den Zugriff auf (Fähigkeit) geben, so dass ich bin ein bisschen verwirrt über das, was Sie erwarten. Vielleicht sehen Sie hier [link] (https://github.com/CanCanCommunity/cancancan/wiki/defining-abilities). Die Seiten, die dem Benutzer angezeigt werden, werden dann von den Controllern und Ansichten gesteuert. – brod

+0

Oh okay, also ist dies nicht der richtige Ort, um festzulegen, auf welche Seiten der Administrator Zugriff hat und auf welche der Benutzer Zugriff hat? – Christina

+0

Danke für den Link übrigens. Es war hilfreich zu lesen, obwohl es meine Frage nicht vollständig geklärt hat – Christina

Antwort

0

Sie können die Anzeige der Webseiten am besten entweder in den Rails Views oder den Rails Controllern steuern. So zum Beispiel in einer Ansicht mit ERB können Sie die Anzeige eines Links steuern, um einen Artikel Objekt bearbeiten mit:

<% if can? :update, @article %> 
    <%= link_to "Edit", edit_article_path(@article) %> 
<% end %> 

dies, dass in Sie davon ausgehen, würde app/models/ability.rb Sie haben so etwas wie:

can :update, Article  # user can update Articles 

Or vielleicht, wenn Sie eine komplett andere View-Vorlage anzeigen möchten? Dann mach das in der Steuerung. Ein roher (ungetestet) Code-Schnipsel, die für die ‚Show‘ in articles_controller.rb Aktion sein könnten:

if can? :read, @article 
    template = 'articles/show' 
else 
    template = 'articles/not_allowed' 
end 
respond_to do |format| 
    format.html { render :template => template } 
    format.js { render :template => template } 
end 
Verwandte Themen