CanCan的管理员授权

时间:2011-01-19 16:24:16

标签: ruby-on-rails ruby-on-rails-3 cancan

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

3 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

答案 2 :(得分:0)

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

Rails Admin's authorization with CanCan