9

Ho un'applicazione Rails che utilizza Device + doorkeeper.Io sto usando cancan anche per Role Management.Nella mia applicazione io uso http://localhost:3000/oauth/applications/new per la registrazione la mia domanda per ottenere l'ID cliente e segreto. Attualmente qualsiasi utente può registrare un'applicazione tramite l'interfaccia web per ottenere l'ID segreto e client, ho bisogno di limitare l'accesso in modo che solo l'amministratore possa registrare l'applicazione.Rails 3: Come limitare l'accesso all'interfaccia web per aggiungere oauth applicazioni autorizzate utilizzando la gemma di Doorkeeper

Ho visto un certo codice in file di doorkeeper.rb

# 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 

ho provato come qui di seguito, ma non funziona ...

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

Grazie in anticipo ......

+0

Sembra un bug, inserisci un problema nella pagina github: https://github.com/applicake/doorkeeper –

+0

ho provato in questo modo, e funziona ........ admin_authenticator do redirect_to (new_user_session_url) unless (current_user.role? : admin) fine – Cyber

+0

Hai provato a tornare indietro? Quindi, qualcosa del genere: 'admin_authenticator {nil}'. Vedi cosa succede, se riesci ancora ad accedere a/oauth/applicazioni allora questo sembra essere un bug – Max

risposta

5

Bene , la tua logica non è corretta. Fondamentalmente stai permettendo a chiunque sia un utente corrente di avere accesso. Si vuole veramente qualcosa di simile:

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

Si potrebbe anche fare

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 

Il che consente di inviare l'utente alla pagina di errore corretto

7

Il codice che ho usato e funziona benissimo è

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

Forse uno migliore è 'redirect_to new_user_session_url a meno che current_user.try (: admin?)' Ma non l'ho testato – coorasse

+0

Questo è perfetto :) –

+1

Usare 'redirect_to new_user_session_url a meno che current_user.try (: admin?)' funzioni. – StarWars

Problemi correlati