[英]rails 4 - role based authorization from scratch
我最近開始學習rails並且必須開發一個具有三個角色的應用程序:user(admin),student,instructor。 我自己寫了下面的代碼。 但問題是它使所有活躍用戶的角色與最近的登錄類似。 例如,如果管理員已登錄,之后學生登錄,然后如果管理員刷新她的頁面,她也將成為學生。 我應該在我的代碼中更改什么來解決這個問題? 如果不可能像這樣實現它,建議我應該如何解決這個問題。 謝謝。
這是我的users_controller代碼:
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
這是我的application_controller.rb代碼
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
在我看來,您正在共享相同的會話密鑰session[:user_id]
來存儲User
, Student
和Instructor
的ID。 您如何區分這三種登錄用戶?
如果登錄的Student
訪問了instructor_index
路徑,那么學生的ID可能會用於加載具有相同ID的Instructor
,並且將呈現教師的視圖。 我沒有看到任何代碼來指示其他情況。
我本來期望這樣的系統存儲session[:user_id]
和session[:user_type]
以確保可以准確識別登錄的人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.