2011-05-02 48 views
0

我想改变这种设计在每个控制器根据使用REDIRECT_URL,即:设计REDIRECT_URL每个控制器

class DashboardController < ApplicationController 
    before_filter :authenticate_user! 
end 

class Admin::BaseController < ApplicationController 
    before_filter :authenticate_user!, :failure_url => admin_login_path 
end 

我不想改变管理员是如何授权。我不想创建管理员模型(devise_for:admin)或客户失败的应用程序。除了redirect_url认证失败之外,我希望跨控制器使用相同的功能。

所有的输入,将不胜感激。

回答

0

你有没有使用惨惨实现

rescue_from CanCan::AccessDenied do |exception| 
    flash[:error] = exception.message 
    redirect_to root_url 
end 

这里的full example考虑。这在CanCan Wiki中也有详细说明。祝你好运!

1

我还没有测试过,但看起来如果你在class Devise::FailureApp中修补了一个名为redirect_url的受保护方法,并使其根据某种逻辑返回一个url,那么你可以重定向到其他URL。问题是,FailureApp与你的控制器是完全分离的,所以你必须使用一些东西来传递这些信息,比如singleton与controllers-> failure_urls map。