2016-03-22 11 views
0

Ich bin in einem ernsten Problem mit der Schule basierte Anwendung, möchte ich wie die rollenbasierte System für Admin, Student und der Lehrer einrichten. Ich habe Gerät zur Authentifizierung verwendet und kann für die Autorisierung cancan. Die Sache ist, ich weiß nicht, wo ich anfangen soll. Ich habe das Benutzermodell "devise" hinzugefügt und Feldrollen hinzugefügt. Ich folgte this für die rollenbasierte Autorisierung. Es funktioniert, aber wenn ich versuche, mich mit dem Student-Berechtigungsnachweis anzumelden, indem ich eine Lehrerrolle in der Dropdown-Liste auswähle, werden die Rollen nie validiert (sagt nie, dass der Zugriff für so etwas verweigert wird). Es meldet sich als Student an. Ich möchte die ausgewählten Rollen im Login-Formular validieren.Login Authentifizierung über Rollen ist nicht gültig

Ich benutze jetzt Benutzermodell als das Modell des Geräts. und hat Student Model, Teacher Model und das Admin Model. und der gesamte Student, Lehrer und Administrator gehört dem Benutzer.

Benutzermodell

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
    has_many :admins 
    has_many :students 
    has_many :teachers 
    ROLES = %i[admin teacher student] 
end 

In meiner devise Anmeldung Ansicht

<%= f.collection_select(:role, User::ROLES, :to_s, lambda{|i| i.to_s.humanize}) %> 

Oder will ich für alle Schüler devise Modell verwenden, Lehrer und Admin? Wenn ja, wie vervollständige ich das? Jede Hilfe oder Vorschläge sind hilfreich. Danke im Voraus.

Antwort

0

Wenn Sie einen bestimmten Rollenbenutzer für die Anmeldung mit der im Dropdownmenü ausgewählten Rolle validieren möchten, müssen Sie die Anmeldemethode SessionsController # Create für die im Anmeldeformular ausgewählte Rolle mit den Anmeldedaten des Formulars anpassen und eine Fehlerwarnung senden und vermeiden Benutzer bei geloggt

eine Probe-Sessions # create-Methode wird.

def create 
self.resource = warden.authenticate!(auth_options) 
if resource.role == params[:role] 
    set_flash_message!(:notice, :signed_in) 
    sign_in(resource_name, resource) 
    yield resource if block_given? 
    respond_with resource, location: after_sign_in_path_for(resource) 
else 
    set_flash_message!(:error, "UnAuthorized Access!") 
    redirect_to root_path 
end 
end 
Verwandte Themen