0

我正在 Rails 4.1 中制作一个脚本,该脚本正在读取所有 ActiveAdmin 资源类及其 member_action 方法,但是如何在类中获取其他定义的方法?该脚本的目标是使用类中定义的方法获取所有资源,以便在数据库中设置管理员用户权限

def get_permissions
    skip_resources = [ 'dashboard.rb' ];
    default_actions = [ 'create', 'read', 'update', 'delete' ];
    resources = Dir.new("#{Rails.root}/app/admin").entries

    all_resources = {}
    resources.each do |resource|
        if resource =~ /.rb/ && (not skip_resources.include? resource)
            resource_class = resource.gsub(".rb","")
            # resource_obj = resource_class.camelize.constantize.new
            all_resources[resource_class] = default_actions #TODO: merge with the defined in class methods
        end
    end
    all_resources
end
4

1 回答 1

1

这个 rake 任务输出资源和页面的所有定义的操作,但它确实需要加载 Rails 和 ActiveAdmin 配置。

也可作为要点:active_admin_actions.rake

task :active_admin_actions => :environment do
    skip_resources = [ 'Dashboard' ]

    namespace = ActiveAdmin.application.namespace(:admin)

    pages     = namespace.resources.select { |r| r.is_a? ActiveAdmin::Page }
    resources = namespace.resources.select { |r| r.respond_to? :resource_class }

    resource_actions =
      resources.each_with_object({}) do |resource, actions|
        resource_name = resource.resource_class.name

        if !skip_resources.include? resource_name
          actions[resource_name] = resource.defined_actions
          actions[resource_name].concat resource.member_actions.map { |action| action.name }
          actions[resource_name].concat resource.collection_actions.map { |action| action.name }
        end
      end

    puts resource_actions.inspect

    page_actions =
      pages.each_with_object({}) do |page, actions|
        page_name = page.name

        if !skip_resources.include? page_name
          actions[page_name] = page.page_actions + [:index]
        end
      end

    puts page_actions.inspect
end
于 2014-05-06T19:05:32.810 回答