2012-06-21 8 views
7

Hers jest mój environment.rbRoR | Opracować pętlę przekierowania powodu cancan zezwolić

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    rescue_from CanCan::AccessDenied do |exception| 
    flash[:error] = "You must first login to view this page" 
    session[:user_return_to] = request.url 
    redirect_to "https://stackoverflow.com/users/sign_in" 
    end                                     

end 

To przekierowanie wykorzystanie do strony logowania, jeśli AccessDenied jest rzut, a użytkownik nie jest zalogowany („działa dobrze”), ale po zalogowaniu się spowoduje pętlę przekierowania, jeśli jest zalogowany, ale nie autoryzowany przez cancan, ponieważ strona logowania przekieruje je z powrotem do użytkownika z powrotem za pośrednictwem sesji [: user_return_to] = request.url.

Pytanie brzmi: w jaki sposób obsłużyć tę logikę, jeśli użytkownik jest zalogowany, ale nie autoryzowany.

+0

jeśli używasz devise do uwierzytelniania możesz sprawdzić 'current_user' jeśli użytkownik jest zalogowany lub nie – krichard

Odpowiedz

13

Dodałem trochę warunek, aby to działało.

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    #Redirects to login for secure resources 
    rescue_from CanCan::AccessDenied do |exception| 

     if user_signed_in? 
     flash[:error] = "Not authorized to view this page" 
     session[:user_return_to] = nil 
     redirect_to root_url 

     else    
     flash[:error] = "You must first login to view this page" 
     session[:user_return_to] = request.url 
     redirect_to "https://stackoverflow.com/users/sign_in" 
     end 

    end 
end 
Powiązane problemy