| Module | Authorization::Maintenance::Usage |
| In: |
lib/declarative_authorization/maintenance.rb
|
Module for grouping usage-related helper methods
Delivers a hash of {ControllerClass => usage_info_hash}, where usage_info_hash has the form of
# File lib/declarative_authorization/maintenance.rb, line 55
55: def self.usages_by_controller
56: # load each application controller
57: begin
58: Dir.glob(File.join(::Rails.root, 'app', 'controllers', '**', '*_controller\.rb')) do |entry|
59: require entry
60: end
61: rescue Errno::ENOENT
62: end
63: controllers = []
64: ObjectSpace.each_object(Class) do |obj|
65: controllers << obj if obj.ancestors.include?(ActionController::Base) and obj != ActionController::Base and obj.name.demodulize != 'ApplicationController'
66: end
67:
68: controllers.inject({}) do |memo, controller|
69: catchall_permissions = []
70: permission_by_action = {}
71: controller.all_filter_access_permissions.each do |controller_permissions|
72: catchall_permissions << controller_permissions if controller_permissions.actions.include?(:all)
73: controller_permissions.actions.reject {|action| action == :all}.each do |action|
74: permission_by_action[action] = controller_permissions
75: end
76: end
77:
78: actions = controller.public_instance_methods(false) - controller.hidden_actions.to_a
79: memo[controller] = actions.inject({}) do |actions_memo, action|
80: action_sym = action.to_sym
81: actions_memo[action_sym] =
82: if permission_by_action[action_sym]
83: {
84: :privilege => permission_by_action[action_sym].privilege,
85: :context => permission_by_action[action_sym].context,
86: :controller_permissions => [permission_by_action[action_sym]]
87: }
88: elsif !catchall_permissions.empty?
89: {
90: :privilege => catchall_permissions[0].privilege,
91: :context => catchall_permissions[0].context,
92: :controller_permissions => catchall_permissions
93: }
94: else
95: {}
96: end
97: actions_memo
98: end
99: memo
100: end
101: end