2017-10-07 2 views
0

In meinem Projekt habe ich eine Benutzerklasse arbeiten mit Devise-Authentifizierung. Jedem Benutzer ist eine Rolle zugeordnet. Zum Beispiel ist ein Manager die Rolle # 1.Schienen: cancancan gem Zustand funktioniert nicht

Rolle ist eine Klasse und es gibt eine Zuordnung zwischen Rolle und Benutzer basierend auf role_id. So hat ein Manager eine role_id von 1.

Ich installierte cancancan gem, um die Erlaubnis für jeden Benutzer zu verwalten. Nur ein Manager kann ein Benutzerkonto erstellen. Also, ich dies in der Fähigkeit, Klasse schrieb:

def initialize(user) 
    user ||= User.new # guest user (not logged in) 
    if user.role_id == 1 
     can :manage, :user 
    else 
     cannot :manage, :user 
    end 
end 

In meinem Benutzer Controller, ich habe dies:

def new 
    @user = User.new 
    authorize! :manage, @user 
end 

Das Problem ist, wenn ich mit meinem Manager anmelden und versuchen, den Zugang zu neuer Benutzerseite Ich erhalte die Nachricht von cancancan, dass ich nicht die Erlaubnis habe, auf die Seite zuzugreifen.

Ich weiß nicht, ob es mein Zustand ist oder wenn ich versuche zu zugreifen user.role_id oder ...

Vielen Dank für Ihre Hilfe.

Siehe cancancan gem: https://github.com/CanCanCommunity/cancancan

Edit:

Es ist normal, wenn meine IDE sagt, dass es nicht current_user finden kann? enter image description here

Auch, wenn Sie auf Github überprüfen, gibt es ein Beispiel dafür, wie die Verwendung cancancan:

enter image description here

Wie Sie sehen, gibt es eine @article nach der Leseberechtigung. Also ich glaube nicht, dass ich current_user statt @user

Schließlich setzen müssen:

Problem war die :user, die nicht korrekt war. Wenn es ein Modell ist, müssen Sie zuerst einen Großbuchstaben für den Namen des Modells ohne ":" schreiben. Also statt :user sollte es User sein

+0

Problem war der: Benutzer, der nicht korrekt war. Wenn es ein Modell ist, müssen Sie zuerst einen Großbuchstaben für den Namen des Modells ohne ":" schreiben. Also anstelle von: user sollte es User sein –

Antwort

0

current_user verlässt sich auf eine Rails-Sitzung. Da dies Ihre #new-Aktion auf Ihrem Benutzer-Controller ist, haben Sie keine aktive Sitzung, also keinen current_user.