You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActiveAdmin中如何获取资源页面自定义名称并区分页面类型?

解决方案

1. 获取资源页面的自定义名称

当你通过 as: 'Customer' 注册资源时,对应的 subject 是 ActiveAdmin::Resource 实例,它的 resource_name 属性存储了自定义名称。你可以通过 subject.resource_name.singular 获取单数形式的自定义名称(比如示例中的"Customer"),或者用 subject.resource_name.plural 获取复数形式("Customers")。

修改权限判断逻辑如下:

class AdminAuthorization < ActiveAdmin::AuthorizationAdapter
  def authorized?(action, subject = nil)
    # 处理独立页面(如Dashboard)
    return true if subject.is_a?(ActiveAdmin::Page) && subject.name == 'Dashboard'
    
    # 处理资源页面,获取自定义名称
    if subject.is_a?(ActiveAdmin::Resource)
      custom_name = subject.resource_name.singular
      return false if custom_name == 'Customer' && !current_user.admin?
    end

    # 补充其他默认权限逻辑(根据需求调整)
    # ...
  end
end

2. 区分独立页面和资源页面

直接通过判断 subject 的类类型即可精准区分:

  • 独立页面(如Dashboard)的 subject 是 ActiveAdmin::Page 类的实例
  • 资源页面(如你注册的Customer/Member)的 subject 是 ActiveAdmin::Resource 类的实例

你可以用 subject.is_a?(ActiveAdmin::Page) 或 subject.is_a?(ActiveAdmin::Resource) 来做判断,这是最可靠的方式。

内容的提问来源于stack exchange,提问作者Bruno Aguiar de Souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:40:34