[RUBY-ON-RAILS] 어떻게 고안를 사용하여 자신의 역할에 따라 사용자의 홈 (루트) 경로를 재 지정할 수 있습니다?
RUBY-ON-RAILS어떻게 고안를 사용하여 자신의 역할에 따라 사용자의 홈 (루트) 경로를 재 지정할 수 있습니다?
나는 프로젝트 관리 응용 프로그램에서 일하고 있어요, 앱에, 나는 project_managers와 클라이언트를 가지고있다. 나는 인증 / 권한 부여를 위해 고안와 캉캉을 사용하고 있습니다.
로그인 후 어떤 시점에서 자신의 특정 컨트롤러 / 레이아웃 /보기로 사용자를 리디렉션해야 하는가? 그들은 프로젝트 관리자 또는 클라이언트있어 여부에 따라 루트 (또는 리디렉션) routes.rb에 current_user.role를 확인하고 설정하는 방법이 있나요? 이것은 내가 고안의 어딘가에서 만들 수있는 변화인가?
어떤 도움에 미리 감사드립니다! --표
해결법
-
==============================
1.특정 루트 경로를 지정하는 데 사용할 수 없습니다 귀하의 routes.rb 파일은 사용자가 가지고있는 어떤 역할 어떤 생각을 가지고 있지 않습니다.
특정 루트 경로를 지정하는 데 사용할 수 없습니다 귀하의 routes.rb 파일은 사용자가 가지고있는 어떤 역할 어떤 생각을 가지고 있지 않습니다.
당신이 할 수있는 것은 결국 역할과 리디렉션을 읽을 수 있습니다 (예를 들어, passthrough_controller.rb) 컨트롤러를 설정됩니다. 이 같은:
# passthrough_controller.rb class PassthroughController < ApplicationController def index path = case current_user.role when 'project_manager' some_path when 'client' some_other_path else # If you want to raise an exception or have a default root for users without roles end redirect_to path end end # routes.rb root :to => 'passthrough#index'
이 방법은 모든 사용자가 차례로 자신의 역할에 따라 적절한 컨트롤러 / 액션로 리디렉션 항목의 한 지점을해야합니다.
-
==============================
2.가장 간단한 해결책은 사용 람다이다 :
가장 간단한 해결책은 사용 람다이다 :
root :to => 'project_managers#index', :constraints => lambda { |request| request.env['warden'].user.role == 'project_manager' } root :to => 'clients#index'
-
==============================
3.또 다른 옵션은이 같은 인증 방법 (I이 예에서 rolify을 사용하고 있습니다)에 PROC를 전달하는 것입니다 :
또 다른 옵션은이 같은 인증 방법 (I이 예에서 rolify을 사용하고 있습니다)에 PROC를 전달하는 것입니다 :
authenticated :user, ->(u) { u.has_role?(:manager) } do root to: "managers#index", as: :manager_root end authenticated :user, ->(u) { u.has_role?(:employee) } do root to: "employees#index", as: :employee_root end root to: "landing_page#index"
각 루트 경로의 고유 한 이름을 지정해야 4 레일에 대한 자세한 내용은이 문제를 볼 수 있습니다.
-
==============================
4.내가 소장을 사용하는 레일 3 응용 프로그램에서이 작업을 수행. 유증은 소장의 상단에 내장되어 있기 때문에, 나는 당신을 위해 일 거라고 생각하지만,에 의존하기 전에 그것으로 약간의 실험을해야합니다.
내가 소장을 사용하는 레일 3 응용 프로그램에서이 작업을 수행. 유증은 소장의 상단에 내장되어 있기 때문에, 나는 당신을 위해 일 거라고 생각하지만,에 의존하기 전에 그것으로 약간의 실험을해야합니다.
class ProjectManagerChecker def self.matches?(request) request.env['warden'].user.role == 'project_manager' end end # routes.rb get '/' => 'project_managers#index', :constraints => ProjectManagerChecker get '/' => 'clients#index'
사용자의 역할이 "project_manager"는 ProjectManagersController가 사용됩니다 - 그것은 ClientsController가 사용됩니다 아니라면. 그들은 모두에 로그인하지 않은 경우, ENV 사용자가 nil이 될 것입니다. '소장'] 당신은 아마 주위에 작업 할 수 있습니다, 그래서 당신은 오류가 발생합니다, 그러나 이것은 당신이 시작하는 것입니다.
-
==============================
5.구현과 블로그 게시물 http://minhajuddin.com/2011/10/24/how-to-change-the-rails-root-url-based-on-the-user-or-role/
구현과 블로그 게시물 http://minhajuddin.com/2011/10/24/how-to-change-the-rails-root-url-based-on-the-user-or-role/
from https://stackoverflow.com/questions/4753871/how-can-i-redirect-a-users-home-root-path-based-on-their-role-using-devise by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 레일에서 2.3.8 4.0으로 업그레이드 (0) | 2020.02.29 |
---|---|
[RUBY-ON-RAILS] 원격 => 진실과 respond_to : 4 AJAX JQuery와 함께 부분적 렌더링 레일 (0) | 2020.02.29 |
[RUBY-ON-RAILS] 들러 :: GemNotFound은 : 소스의에서 레이크 - 10.3.2 찾을 수 없습니다 (0) | 2020.02.29 |
[RUBY-ON-RAILS] "경고 : 수 대량 할당하지 보호 속성" (0) | 2020.02.29 |
[RUBY-ON-RAILS] 레일 3 잘못된 멀티 바이트 문자 (US-ASCII) (0) | 2020.02.29 |