【问题标题】:Admin Authorization with CanCan使用 CanCan 进行管理员授权
【发布时间】:2018-01-02 11:01:04
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    将应用程序控制器添加到您的命名空间并为其添加一个前置过滤器。

    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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        Rails Admin's authorization with CanCan

        【讨论】:

        • 他提到 rails_admin 了吗?
        • 是的,你是对的,他没有提到 rails_admin。我不建议使用 rails_admin,因为它没有我想象的那么好。
        猜你喜欢
        • 2016-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多