2016-10-25 5 views
1

이 컨트롤러의 show 메소드에 GET 요청을 호출 할 때 "Pundit :: PolicyScopingNotPerformedError"가 표시됩니다. 어떤 도움을 주셔서 감사합니다.Rails Pundit 인증이 수행되지 않았습니다.

컨트롤러 :

여기
class DashboardsController < ApplicationController 
    before_action :authorize_dashboard_for_customer, only: :show 
    after_action :verify_authorized, except: :index 
    after_action :verify_policy_scoped, only: :show 

    expose(:dashboards) { 
    Customer.find(params[:customer_id]).dashboards 
    } 

    expose(:dashboard) { 
    Dashboard.find(params[:id]) 
    } 

    expose(:customer) { 
    Customer.find(params[:customer_id]) 
    } 

    def index 
    end 

    def show 
    end 



    private 

    def authorize_dashboard_for_customer 
    authorize dashboard, :show? 
    end 
end 

는 학자 정책 : 이것에 대해 다른 게시물을 읽을 수 있지만 여전히 내가 잘못 여기서 뭘하는지 표시되지 않는 한

class DashboardPolicy < ApplicationPolicy 

    def index? 
    show? 
    end 

    def show? 
    customer = user.try(:customer) 
    return false if customer.blank? 

    @record.customers.present? && @record.customers.include?(customer) || user.role == 'admin' 
    end 
end 

. 나는 여전히 정책 범위를 해결하는 일에 희미하지만,이 경우에는 정책을 위반한다는 디버그 문을 볼 수 있으므로 어떤 문제인지 잘 모르겠습니다.

답변

1

컨트롤러에서 정책 범위가 after_action :verify_policy_scoped, only: :show과 함께 호출되는지 확인하고 있지만 작업의 범위에 대해 아무 것도 호출하지 않습니다.

Scopes을 사용하여 로그인 한 사용자 권한을 기반으로 결과를 제한 할 수 있습니다. 예를 들어 인덱스 화면의 관리자는 모든 결과를 볼 수 있지만 비 관리자는 특정 레코드 만 볼 수 있습니다. IMO에서는 쇼에서 스코프가 필요하지 않으므로 verify_policy_scoped을 제거 할 수 있어야합니다.

+0

감사합니다. 일부 도움이됩니다. @Scott - 당신은 action_scope의 범위에 대해 아무것도 호출하지 않는다고 말하고 싶습니다 - 나는 정책 메서드 나 컨트롤러 메서드에서이 범위를 호출할까요? – Andrew

+0

@andrew 범위 클래스를 정책 클래스에 추가 한 다음 컨트롤러에서 호출하여 레코드를 검색합니다. – Scott

관련 문제