6

Mam zasób grupy, który próbuję skonfigurować z odpowiednimi uprawnieniami.Wiele instrukcji before_filter dla poprawnego użytkownika i administratora

Logika upoważnienie Próbuję zaimplementować to:

  1. Tylko członkowie grupy powinni być w stanie wyświetlić ich grupy.
  2. Administrator może wyświetlić dowolną grupę, a także podjąć inne działania.

ja próbuje zrobić to z następujących before_filter sprawozdania w kontrolerze Grupa:

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

Correct_user działa jak już zweryfikowane, że tylko członkowie grupy mogą przeglądać ich grupy. Jednak chcę, aby klauzula admin: show nadpisała to, aby administrator mógł wyświetlać dowolną grupę. Obecnie to nie działa. Zgaduję, że mam tu coś nie tak z moją kolejnością filtrowania i opcjami.

Czy ktoś może mi powiedzieć, gdzie się zepsułem?

EDIT

Dodanie mój kod metody na żądanie Amar za:

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 użytkownik_admin przed filtrem powyżej correct_user lub w show działania sprawiają warunkowy dla użytkownika admin i innych – Amar

+0

Dzięki Amar. Próbowałem umieścić filtr admin_user powyżej proper_user, ale to nie naprawiło. Mogę umieścić warunek w akcji, ale chcę sprawdzić, czy istnieje sposób na zrobienie tego za pomocą before_filter. – pejmanjohn

+0

Po dalszej kontroli w sposób, w jaki mam to napisane powyżej, filtr wymaga od użytkownika zarówno administratora, jak i poprawnego użytkownika, aby móc przeglądać grupę. Chcę, żeby to było OR – pejmanjohn

Odpowiedz

2

zaktualizować metoda correct_user lub utworzyć inną metodę z następującą definicją usunąć pokaz z innym filtrem i dodać before_filter z nowej metody .

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

Po prostu przetestowane i działa świetnie. Musiałem dodać "&&" pomiędzy instrukcjami boolowskimi. – pejmanjohn

Powiązane problemy