有没有一种方法可以在ActiveAdmin中获取资源页面的页面名称



我正在对组执行一种权限功能,每个组都有不同的权限访问ActiveAdmin页面。但有些页面的名称与其型号不同。。。

ActiveAdmin.register Member, as: 'Customer' do # rubocop:disable Metrics/BlockLength
actions :all, except: %w[new create destroy]
filter :email
end

在我的授权适配器中,我试图实现以下功能:

class AdminAuthorization < ActiveAdmin::AuthorizationAdapter
def authorized?(action, subject = nil)

# This one is really a page, not linked to model.
return true if subject.name == 'Dashboard'

# this will be done more dynamically later with tables
return false if subject.name == 'Customer' && !current_user.admin? 
end
end

";name";方法适用于Pages,但不适用于Resources。有没有类似的方法可以在这里获得"客户"而不是"会员"?我如何知道资源是页面还是资源?

我使用bundle info activeadmin来定位机器上的gem源,读取~/.rvm/gems/ruby-2.6.5@sfp-rails-6/gems/activeadmin-2.13.1/lib/active_admin/authorization_adapter的源时,我注意到resource有一个attr_reader

然后我在授权的入口处丢了一个byebug

def authorized?(action, subject = nil)
byebug
# ...
end

并使用pp resource.methods转储该资源具有的methods(在请求自定义活动管理页面后(。这给出了一个包含许多方法的巨大数组,但我看到了许多resource_方法,所以我转储了这些:

resource.methods.select{|m|m=~/resource/}

产生

[
:find_resource,
:resource_name_extension,
:resource_columns,
:resource_attributes,
:resource_class,
:resource_column_names,
:resource_table_name,
:resource_quoted_column_name,
:resource_class_name,
:resource_label,
:resource_name,
:plural_resource_label,
:resources_configuration
]

您可以使用以下条款:

class AdminAuthorization < ActiveAdmin::AuthorizationAdapter
def authorized?(action, subject = nil)
return true if resource.resource_name.name == 'Customer'
end
end

还有:

resource.resources_configuration

我鼓励你检查一下。我还没有找到查询resource是否为PageActiveRecord模型的通用方法。

相关内容

  • 没有找到相关文章

最新更新