module Seven::Rails::ControllerHelpers::ClassMethods
Attributes
seven_ability_checker[R]
Public Instance Methods
seven_ability_check(default_target, custom_checker = nil, opts = {})
click to toggle source
Examples:
ability_check :@topic ability_check [:@topic, Topic] ability_check [:@topic, Topic], show: {ability: :read_t, target: [:user]} ability_check show: {ability: :read_t, target: [:user]} ability_check action1: {something_opts}, action2: {someting_opts} ability_check [:@topic, Topic], nil, resource_name: :comments
# File lib/seven/rails/controller_helpers.rb, line 61 def seven_ability_check(default_target, custom_checker = nil, opts = {}) @seven_ability_checker = seven_generate_controller_checker( default_target, custom_checker, opts ) before_action :seven_ability_check_filter end
Private Instance Methods
seven_format_ability_checker(checker)
click to toggle source
# File lib/seven/rails/controller_helpers.rb, line 110 def seven_format_ability_checker(checker) checker.each_with_object({}) do |data, result| action_name, action_checker = data tmp = result[action_name.to_sym] = action_checker.symbolize_keys unless tmp[:ability] && tmp[:target] raise Seven::ArgsError, "Invalid checker #{action_name}: #{action_checker}" end end end
seven_generate_controller_checker(default_target, custom_checker, opts)
click to toggle source
# File lib/seven/rails/controller_helpers.rb, line 72 def seven_generate_controller_checker(default_target, custom_checker, opts) if default_target.is_a?(Hash) raise Seven::ArgsError, 'Invalid arguments' if custom_checker seven_format_ability_checker(default_target) else controller_checker = seven_generate_default_ability_checker( default_target, opts[:resource_name] || opts['resource_name'] ) if custom_checker.is_a?(Hash) controller_checker.merge(seven_format_ability_checker(custom_checker)) elsif custom_checker.nil? controller_checker else raise Seven::ArgsError, 'Invalid arguments' end end end
seven_generate_default_ability_checker(target, resource_name)
click to toggle source
# File lib/seven/rails/controller_helpers.rb, line 91 def seven_generate_default_ability_checker(target, resource_name) resource_name ||= name.demodulize.sub(/Controller$/, '').underscore pluralize_name = resource_name.to_s.pluralize singularize_name = resource_name.to_s.singularize [ [:index, :read, pluralize_name], [:show, :read, singularize_name], [:new, :create, singularize_name], [:edit, :edit, singularize_name], [:create, :create, singularize_name], [:update, :edit, singularize_name], [:destroy, :delete, singularize_name] ].each_with_object({}) do |data, result| action_name, opt, resource_name = data result[action_name] = {ability: "#{opt}_#{resource_name}".to_sym, target: target} end end