簡體   English   中英

rails 4 - 從頭開始​​的基於角色的授權

[英]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]來存儲UserStudentInstructor的ID。 您如何區分這三種登錄用戶?

如果登錄的Student訪問了instructor_index路徑,那么學生的ID可能會用於加載具有相同ID的Instructor ,並且將呈現教師的視圖。 我沒有看到任何代碼來指示其他情況。

我本來期望這樣的系統存儲session[:user_id]session[:user_type]以確保可以准確識別登錄的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM