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
相关产品推荐
相关产品推荐

