2016-10-27 2 views
0

ich diese Art von Prüfungen bin mit in vielen Teilen meiner AnwendungRails - erstellen Methoden für Benutzerrollen Überprüfung

if user_signed_in? && current_user.role.label == "admin" 
     # do something 
end 

ich eine Methode in dem User Modell erstellen entschieden (ersinnen), die diese Prüfung enthält

# app/models/user.rb 
def is_admin? 
    user_signed_in? && self.role.label == "admin" 
end 

def is_editor? 
    user_signed_in? && self.role.label == "editor" 
end 

# etc etc 

So kann ich das stattdessen nur für mehr usabillity verwenden.

if current_user.is_admin? 
    # do something 
end 

Allerdings bekomme ich einen Fehler für nicht definierte user_signed_in? Methode. Wie kann ich das lösen?

Antwort

2

signed_in ist keine Methode innerhalb des Modells verfügbar, nur innerhalb der Steuerung. Weder ist current_user

Sie sind besser dran machen eine Methode in der ApplicationController. Machen Sie es eine Hilfsmethode, so dass Sie auch in Ansichten verwenden können ...

class ApplicationController 
    helper_method :admin? 
    def admin? 
     current_user && current_user.role.label == "admin" 
    end 
    end 

Sie können dann verwenden, und Sie brauchen nicht zu einem Benutzerobjekt zu befestigen.

<% if admin? %> 
<%= "this is an admin" %> 
<% end %> 
2

user_signed_in? wird eine Controller-Methode durch devise hinzugefügt sein, die ich vorstellen würde

ich es entweder in einem Helfer hinzufügen würde oder haben es als Methode in der Anwendung Controller

class ApplicationController 
    def is_admin? 
    user_signed_in? && current_user.role.label == "admin" 
    end 
    helper_method :is_admin? 

    def is_editor? 
    user_signed_in? && current_user.role.label == "editor" 
    end 
    helper_method :is_editor? 
end 

helper_method es machen zugänglich für die Ansicht

1

Versuchen Sie dies, wenn diese Methode in Benutzermodell definieren möchten, gehen Sie wie dieses

in Benutzermodell

def is_admin? 
    self.role.label == "admin" 
    end 

Und diese es, wo jeder in Ihrer Ansicht verwenden wie

<% if current_user && current_user.admin? %> 

<% end %> 
0

Ein besserer Ansatz ist es, rolify gem. rolify ermöglicht es Ihnen, Rollen für Ihren Benutzer zu erstellen, und Sie überprüfen einfach user.has_role

+0

Ich habe diese https://github.com/plataformatec/devise/wiki/How-To:-Add-a-default-role-to-(a-Benutzer, um Rollen hinzuzufügen – Lykos

Verwandte Themen