6

У меня есть ресурс группы, который я пытаюсь настроить с помощью соответствующих полномочий.Несколько инструкций before_filter для correct_user и admin

Логика авторизации Я пытаюсь осуществить это:

  1. Только члены группы должны иметь возможность просматривать свою группу.
  2. Администратор может просматривать любую группу, а также принимать другие меры.

Я пытаюсь сделать это с помощью следующего 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 переопределил это, чтобы администратор мог просматривать любую группу. В настоящее время это не работает. Я предполагаю, что у меня что-то не так с моим заказом и настройками фильтра.

Может кто-нибудь сказать мне, где я ошибся?

EDIT

Добавление мой метод кода по запросу Амара:

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

Try admin_user перед фильтром выше correct_user или в шоу-акции сделать условно для пользователя с правами администратора и другими – Amar

+0

Спасибо Амара. Я попытался установить фильтр admin_user выше correct_user, но это не исправить. Я мог бы поставить условие в действие, но хочу посмотреть, есть ли способ сделать это с before_filter. – pejmanjohn

+0

При последующем осмотре с тем, как я написал это выше, фильтр требует, чтобы пользователь был как администратором, так и администратором AND correct_user, чтобы просмотреть группу. Я хочу, чтобы это было OR – pejmanjohn

ответ

2

Update метод correct_user или создать другой метод со следующим определением, удалить шоу из другого фильтра и добавить before_filter с новым методом ,

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