在我的ROR 3应用中,我有两个模型,users & company
配置为ActiveAdmin
gem。我想限制我的一位管理员用户只能访问users
模型(比如他可以更改password
,username
等),但他不能更改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
答案 0 :(得分:1)
像CanCan这样的宝石可以与ActiveAdmin集成但是对于这个简单的东西,我认为你可以在这里提供自己的适配器:
http://www.activeadmin.info/docs/13-authorization-adapter.html
第2步将提供一种测试用户访问权限的方法。您可以实现一组简单的布尔标志,也可以使用像simple enum
这样的gem就像这样(在你的用户模型中):
as_enum :admin_role, [:none, :staff, :super]
我们这样做是有效的,而且很简单。