2016-10-17 5 views
1

내가 많은 organizerswedding 클래스를 가지고 있고, 자원이 이벤트의 주최자를 볼 수 있으므로 중첩, 나는 액세스 있습니다권한 부여가 인스턴스 변수에 의존하는 경우 Pundit의 컨트롤러 작업을 어떻게 승인합니까?

Class OrganizersController < ApplicationController 
    def index 
    @wedding = Wedding.find(params[:wedding_id] 
    @organizers = Organizer.where(wedding: @wedding) 
    end 
end 

: 조직에 대한 인덱스 컨트롤러과 같이

입니다 /events/23/organizers 문제는, 전문가가 OrganizersController에 대한 색인 작업을 승인하도록 허용하려면 어떻게해야합니까? 인스턴스의 @wedding 인 경우에만 @wedding.organizers.find(user: current_user).present??

두 모델이 완전히 다른 모델이며 하나의 인증은 다른 모델에 따라 다릅니다.

답변

0

가장 가까운 대답은 this입니다. 그것은 비록 정말 우아한 아니다

authorize(@wedding, :list_organizers?) 

: 나는 보통 그것을 할

방법은, 에 다음 결혼식 정책을 list_organizers? 술어를 추가하는 것입니다.

더 좋은 방법을 찾으면 대답하십시오. 더 좋은 방법으로 받아 들일 것입니다.

0

나는 OrganizerWedding에 속한다고 가정하고 있는데,이 경우 @organizers = @wedding.organizers이 있어야합니다.

그러나 학자 인정에 관한 질문에 대답하려면 scopes을보아야합니다. 여기에서 현재 사용자가 속한 결혼식을 주최자로 반환 할 수 있습니다.

또한 많은 결혼식을 가진 현재 사용자와 주최자의 관계가 있어야합니다. 따라서 사용자는 organizer을 (를) 통해 많은 결혼식을 가지고 있기 때문에 current_user.weddings과 같은 것을 갖게됩니다.

+0

물론 'current_user'에는 많은 'weddings'이 있으며, 'wedding'은 '@ wedding'을 찾는 것입니다. 또한 범위는 사용자 목록 만 제한합니다. 사용자가 주최자가 아닌 한 사용자가/weddings/3/organizers에서 결혼식 주최자의 색인을 볼 수 없도록하고 싶습니다. – amingilani

-1

조직 컨트롤러의 색인 작업에 authorize @wedding을 추가 할 수 있습니까? 귀하의 승인을 추측하면 이미 사용자가 결혼식에 액세스 할 수 있는지 확인하기위한 설정이 완료됩니다.