2011-01-19 256 views
8

A有一堆带有Admin命名空间的控制器。我想限制访问这些,除非用户是管理员。有没有办法使用CanCan做到这一点,而无需致电未经授权!在每个控制器的每个方法中?CanCan的管理员授权

回答

8

将一个应用程序控制器添加到您的名称空间和一个过滤器之前。

class ApplicationController < ActionController::Base 
end 

class Admin::ApplicationController < ApplicationController 
    # these goes in your namespace admin folder 
    before_filter :check_authorized 

    def check_authorized 
    redirect_to root_path unless can? :admin, :all 
    end 
end 

class SomeadminController < Admin::ApplicationController 
    def some_action 
    # do_stuff 
    end 
end 
0

现在rails_admin有惨惨的全力支持,你可以在其官方网站上找到它,就有关该主题的维基页面:

Rails Admin's authorization with CanCan

+0

他提到了rails_admin吗? – 2014-02-16 02:04:59

1

的康康舞列出的Admin Namespaces wiki页面解决这个问题的几个解决方案。

  • 正如@mark建议的,为管理员设置一个基本控制器,用于检查每个操作的授权。
    • 如果您只需检查用户是否有admin 标志,则可能完全不需要使用CanCan。
  • 对于彼此不同地处理管理员(从只有普通用户而非不同), 考虑单独AdminAbility类(这是一个有点偏离主题,但可以证明相关)。
相关问题