9

Mam aplikację Railsową, która używa Device + odźwięcznika. Używam również cancan do zarządzania rolami.W mojej aplikacji używam http://localhost:3000/oauth/applications/new do rejestracji moja aplikacja do uzyskania identyfikatora klienta i tajnego. Obecnie każdy użytkownik może zarejestrować aplikację za pomocą interfejsu internetowego, aby uzyskać klienta i tajny identyfikator, muszę ograniczyć dostęp, aby tylko administrator mógł zarejestrować Aplikację.Szyny 3: Jak ograniczyć dostęp do interfejsu sieciowego w celu dodania autoryzowanych aplikacji przy użyciu przystawki Doorkeeper gem

Widziałem jakiś kod w doorkeeper.rb pliku

# If you want to restrict access to the web interface for adding oauth authorized applications, you need to declare the block below. 
    # admin_authenticator do 
    # # Put your admin authentication logic here. 
    # # Example implementation: 
    # Admin.find_by_id(session[:admin_id]) || redirect_to(new_admin_session_url) 
    # end 

Starałem się jak poniżej, ale nie działa ...

admin_authenticator do 
    if(current_user) 
    current_user.role? :admin 
    else 
    redirect_to(new_user_session_url) 
    end 
end 

góry dzięki ......

+0

Wydaje się, że to błąd, opublikuj problem na stronie github: https://github.com/applicake/doorkeeper –

+0

próbowałem w ten sposób i działa ........ admin_authenticator zrobić redirect_to (new_user_session_url) chyba że (current_user.role? : admin) koniec – Cyber

+0

Czy próbowałeś już wracać zero? A więc coś takiego: 'admin_authenticator {zero}'. Zobacz, co to jest, jeśli nadal możesz uzyskać dostęp do/oauth/aplikacji, to wygląda na to, że jest to błąd. – Max

Odpowiedz

5

Dobrze Twoja logika jest niepoprawna. Zasadniczo pozwalasz, aby każdy, kto jest użytkownikiem current_user, miał dostęp. Naprawdę chcesz coś takiego:

admin_authenticator do 
    if(current_user && current_user.role?(:admin)) 
    #do nothing 
    else 
    redirect_to(new_user_session_url) 
    end 
end 

Można również zrobić

admin_authenticator do 
    if(current_user) 
    redirect_to(not_authorized_url) unless current_user.role?(:admin) 
    else 
    redirect_to(new_user_session_url) 
    end 
end 

Które pozwalają wysłać użytkownikowi na właściwą stronę błędu

7

Kod użyłem i działa świetnie jest

admin_authenticator do 
    redirect_to new_user_session_url unless current_user && current_user.admin? 
end 
+2

Może lepszym rozwiązaniem jest 'redirect_to new_user_session_url, chyba że current_user.try (: admin?)' Ale nie przetestowałem tego – coorasse

+0

Ten jest idealny :) –

+1

Używanie 'redirect_to new_user_session_url, chyba że current_user.try (: admin?)' działa. – StarWars