带有Rails的ActiveAdmin 3:自定义以实现不同管理员用户的不同访问级别

时间:2014-02-18 10:08:10

标签: ruby-on-rails-3 activeadmin models

在我的ROR 3应用中,我有两个模型,users & company配置为ActiveAdmin gem。我想限制我的一位管理员用户只能访问users模型(比如他可以更改passwordusername等),但他不能更改company中的任何数据{1}}模型(如添加公司,或更改公司的no of licenses等)

如何基于模型实现这种不同的访问级别?目前我希望一个管理员用户访问所有模型,一个只访问用户模型

代码段:

我创建了两个管理员用户..一个标记为type-super,另一个标记为正常。以下代码适用于具有完全访问权限的超级管理员,但对于普通管理员,它会出现错误:This web page has redirect loops

应用/管理/ companies.rb:

ActiveAdmin.register Company do

  index do
    column "Company", :name
    column :address
    column "No. of Subscriptions", :no_of_licenses
    column "License Period(Days)", :no_of_days
    if authorized?(:update, companies)
        default_actions
      end
  end
  filter :name


  form do |f|
    f.inputs "Company Details" do
      f.input :name
      f.input :address
      f.input :no_of_licenses, :label => 'No of Subscriptions'
      f.input :no_of_days, :label => 'License Period(Days)'
    end
    f.buttons
  end 

end

应用/模型/ OnlyUser.rb:

class OnlyUser < ActiveAdmin::AuthorizationAdapter

  def authorized?(action, subject = nil)
    user.super?
  end

  end

配置/初始化/ activeadmin.rb:

  config.authorization_adapter = "OnlyUser"

应用/模型/ admin_user.rb:

as_enum :admin_type, :normal => 0, :super => 1

1 个答案:

答案 0 :(得分:1)

像CanCan这样的宝石可以与ActiveAdmin集成但是对于这个简单的东西,我认为你可以在这里提供自己的适配器:

http://www.activeadmin.info/docs/13-authorization-adapter.html

第2步将提供一种测试用户访问权限的方法。您可以实现一组简单的布尔标志,也可以使用像simple enum

这样的gem

就像这样(在你的用户模型中):

  as_enum :admin_role, [:none, :staff, :super]

我们这样做是有效的,而且很简单。