6

적절한 권한을 설정하려고하는 그룹 리소스가 있습니다.correct_user 및 admin에 대한 여러 before_filter 문

내가 구현하기 위해 노력하고있어 인증 논리는 이것이다 :

  1. 만 그룹 회원들은 그룹을 볼 수 있어야합니다.
  2. 관리자는 그룹을보고 그룹을 볼 수 있으며 다른 조치를 취할 수 있습니다.

I 그룹 컨트롤러에서 다음 before_filter 문이 작업을 수행하려고 해요 : 난 단지 그룹 멤버들이 그룹을 볼 수 있다는 것을 확인하는대로

before_filter :signed_in_user 
before_filter :correct_user, only: :show 
before_filter :admin_user, only: [:show, :index, :edit, :update, :destroy] 

Correct_user 작동합니다. 그러나 내가 원하는 것은 admin : show 절을 사용하여 관리자가 모든 그룹을 볼 수 있도록이를 대체하는 것입니다. 현재 작동하지 않습니다. 나는 나의 필터 주문과 옵션에 뭔가 잘못되었다고 생각한다.

누군가 내가 잘못 갔다 고 말할 수 있습니까? 아마르의 요청에 따라 내 방법 코드를 추가

편집

:

private 

def correct_user 
    # User has to be a member to view 
    @group = Group.find(params[:id]) 
    redirect_to(root_path) if @group.members.find_by_member_id(current_user).nil? 
end 

def admin_user 
    redirect_to(root_path) unless current_user.admin? 
end 
+0

해보십시오이를 admin_user는 관리 사용자 및 기타 – Amar

+0

감사 아마르 조건부합니다. 나는 correct_user 위에 admin_user 필터를 넣으려고했으나 그것을 고치지 않았다. 액션에 조건을 넣을 수 있지만 before_filter를 사용하여 작업을 수행 할 수있는 방법이 있는지 알고 싶습니다. – pejmanjohn

+0

필터를 작성한 방법으로 추가 검사를 할 때 그룹을보기 위해서는 사용자가 둘 다, admin과 correct_user가 필요합니다. 나는 OR이 되길 원합니다. – pejmanjohn

답변

2

업데이트 correct_user 방법 또는 다음과 같은 정의와 다른 방법을 만들고, 다른 필터에서 쇼를 제거하고 새로운 방법으로 before_filter를 추가 . correct_user 위 또는 show 액션에서 필터 이전

def correct_user 
    @group = Group.find(params[:id]) 
    redirect_to(root_path) if @group.members.find_by_member_id(current_user).nil? && !current_user.admin? 
end 
+0

테스트를 통과했는데 잘 작동합니다. 부울 문 사이에 "&&"를 추가해야했습니다. – pejmanjohn