Ich habe vor kurzem angefangen, Schienen zu lernen und musste eine Anwendung mit drei Rollen entwickeln: Benutzer (Admin), Student, Ausbilder. Ich habe den folgenden Code selbst geschrieben. Das Problem ist jedoch, dass die Rolle aller aktiven Benutzer der neuesten Anmeldung ähnelt. Wenn z. B. admin angemeldet war und sich ein Schüler später anmeldet und wenn der Administrator seine Seite aktualisiert, wird er auch Schüler. Was sollte ich in meinem Code ändern, um dieses Problem zu beheben? Und wenn es nicht möglich ist, es so zu implementieren, dann schlagen Sie mir vor, wie ich dieses Problem beheben sollte. Vielen Dank.Schienen 4 - rollenbasierte Autorisierung von Grund auf
hier ist mein users_controller Code:
def login
if session[:user_id]!=nil
redirect_to(:action => 'index')
end
end
def attempt_login
if params[:username].present? && params[:password].present?
found_user = User.where(:username => params[:username]).first
if found_user
authorized_user = found_user.authenticate(params[:password])
if authorized_user
flash[:notice] = "Welcome! You are LoggedIn"
session[:user_id] = authorized_user.id
redirect_to(:action => 'index')
return
end
end
found_student = Student.where(:username => params[:username]).first
if found_student
student_id = Student.authenticate(params[:username],params[:password])
if student_id
flash[:notice] = "Welcome! You are LoggedIn"
session[:user_id] = student_id
redirect_to(:action => 'student_index')
return
end
end
found_instructor = Instructor.where(:username => params[:username]).first
if found_instructor
instructor_id = Instructor.authenticate(params[:username],params[:password])
if instructor_id
flash[:notice] = "Welcome! You are LoggedIn"
session[:user_id] = instructor_id
redirect_to(:action => 'instructor_index')
return
end
end
flash[:notice] = "Invalid username/Password combination."
redirect_to(:action => 'login')
end
end
def logout
flash[:notice]="Logged out"
session[:user_id] = nil
redirect_to(:action => "login")
end
und hier ist mein application_controller.rb Code
def require_login
unless session[:user_id] or config.my_config
flash[:notice] = "You are not Logged In"
redirect_to :root
return false
else
return true
end
end