module Authorization::Maintenance::Usage
Module for grouping usage-related helper methods
Public Class Methods
usages_by_controller()
click to toggle source
Delivers a hash of {ControllerClass => usage_info_hash}, where usage_info_hash has the form of
# File lib/declarative_authorization/maintenance.rb, line 55 def self.usages_by_controller # load each application controller begin Dir.glob(File.join(::Rails.root, 'app', 'controllers', '**', '*_controller\.rb')) do |entry| require entry end rescue Errno::ENOENT end controllers = ObjectSpace.each_object(Class).select do |obj| obj.ancestors.include?(ActionController::Base) && obj != ActionController::Base && (!obj.name || obj.name.demodulize != 'ApplicationController') end controllers.inject({}) do |memo, controller| catchall_permissions = [] permission_by_action = {} controller.all_filter_access_permissions.each do |controller_permissions| catchall_permissions << controller_permissions if controller_permissions.actions.include?(:all) controller_permissions.actions.reject {|action| action == :all}.each do |action| permission_by_action[action] = controller_permissions end end actions = controller.public_instance_methods(false) - controller.hidden_actions.to_a memo[controller] = actions.inject({}) do |actions_memo, action| action_sym = action.to_sym actions_memo[action_sym] = if permission_by_action[action_sym] { :privilege => permission_by_action[action_sym].privilege, :context => permission_by_action[action_sym].context, :controller_permissions => [permission_by_action[action_sym]] } elsif !catchall_permissions.empty? { :privilege => catchall_permissions[0].privilege, :context => catchall_permissions[0].context, :controller_permissions => catchall_permissions } else {} end actions_memo end memo end end