CanCan的管理员授权

问题描述 投票:8回答:3

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

ruby-on-rails ruby-on-rails-3 cancan
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
投票

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

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

0
投票

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

Rails Admin's authorization with CanCan

© www.soinside.com 2019 - 2024. All rights reserved.