9

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

4

3 回答 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
于 2011-01-19T16:32:40.290 回答
1

CanCan的Admin Namespaces wiki 页面列出了该问题的几个解决方案。

  • 正如@mark 建议的那样,为管理员设置一个基本控制器,用于检查每个操作的授权。
    • admin 如果您只需要检查用户是否有标记,则可能根本不需要为此使用 CanCan 。
  • 为了处理彼此不同的管理员(而不是仅与普通用户不同),考虑一个单独的AdminAbility类(这有点离题,但可以证明是相关的)。
于 2012-07-31T15:39:31.053 回答
0

现在 rails_admin 已经完全支持 Cancan,你可以在它的官方网站上找到它,有一个关于这个主题的 wiki 页面:

Rails 管理员对 CanCan 的授权

于 2012-03-14T03:39:15.370 回答