2011-05-14 2 views
0

내 응용 프로그램에 권한이있는 프로젝트가 있습니다. 사용자가 프로젝트에 대한 권한 레코드를 갖고 있다면 프로젝트를 볼 수 있습니다. 그렇지 않으면 CanCan이 루트로 리디렉션합니다.프로젝트에 대한 권한을 처리하고 액세스 권한을 요청하는 권한없는 페이지를 표시하는 방법은 무엇입니까?

사용자가 구성원이 아닌 프로젝트 (/ project/100)를 보려고하면 사용자가 가입을 요청할 수있는 페이지를 보여줍니다.

if projectid_viewing && current_user.try(:role, projectid_viewing) == 'Member' 
    can [:read, :members], Project 
    .... 

이 캉캉 능력이 구성원이 프로젝트를 볼 수 있도록 훌륭한 작동하지만, 비 회원은 루트에 쫓겨됩니다 캉캉에서

, 나는 다음있다. 이것을 처리하는 좋은 방법은 무엇입니까? 비회원이 프로젝트를 보려고하면 해당 프로젝트의 참여 요청 페이지로 이동합니까?

아이디어가 있으십니까? 감사합니다.

답변

0

컨트롤러에 load_and_authorize_resource을 사용한다고 가정 할 때 cancan은 사용자가 승인되지 않은 경우 예외를 throw합니다. 사용자가이를 catch하고 동작을 정의 할 수 있습니다.

class ApplicationController < ActionController::Base 
    rescue_from CanCan::AccessDenied do |exception| 
    redirect_to request_join_page if current_user.member? 
    end 
end 

당신은 또한 수동 컨트롤러에서 can?를 실행 한 다음 필요한 경우 리디렉션을 수행 할 수 대신 load_and_authorize_resource를 사용하는 컨트롤러의 권한을 확인할 수 있습니다.

+0

감사합니다. 그러나 저는 AppController를 망치는 것이 확장 성이 아닌 여기에있는 방법이라고 생각하지 않습니다. – AnApprentice

관련 문제