使用CanCan进行管理员授权

9

我有许多带有“Admin”命名空间的控制器。我想限制对这些控制器的访问,除非用户是管理员。是否可以使用CanCan来实现这一点,而无需在每个控制器的每个方法中调用unauthorized! ?

3个回答

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

1

Admin Namespaces维基页面列出了解决此问题的几个方案。

  • 正如@mark所建议的那样,为管理员设置一个基础控制器,在每个操作中检查授权。
    • 如果您只需要检查用户是否具有admin标志,则可能根本不需要使用CanCan。
  • 要将管理员与普通用户区别对待,请考虑单独使用AdminAbility类(这有点离题,但可能会证明相关)。

0

现在rails_admin已经完全支持Cancan,您可以在其官方网站上找到它,有一个专门的wiki页面介绍这个主题:

使用Cancan进行Rails Admin授权


他有提到rails_admin吗? - Daniel Bang
是的,你说得对,他没有提到rails_admin。我不建议使用rails_admin,因为它并不像我想象的那么好。 - Siwei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接