Class: Adeia::ControllerResource
- Inherits:
-
Object
- Object
- Adeia::ControllerResource
- Defined in:
- lib/adeia/controller_resource.rb
Class Method Summary collapse
- .add_before_filter(controller_class, method, **args) ⇒ Object
- .get_controller_and_resource(element, resource) ⇒ Object
- .load_resource_or_records_and_authorize(controller, **args) ⇒ Object
- .require_login(controller, **args) ⇒ Object
Instance Method Summary collapse
- #authorization ⇒ Object
- #authorize! ⇒ Object
- #authorized?(method) ⇒ Boolean
- #check_permissions! ⇒ Object
-
#initialize(controller, **args) ⇒ ControllerResource
constructor
A new instance of ControllerResource.
- #load_records ⇒ Object
- #load_resource ⇒ Object
Constructor Details
#initialize(controller, **args) ⇒ ControllerResource
Returns a new instance of ControllerResource.
40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/adeia/controller_resource.rb', line 40 def initialize(controller, **args) @controller = controller @action_name = args.fetch(:action, @controller.action_name) @controller_name = args.fetch(:controller, @controller.controller_path) @token = args.fetch(:token, @controller.request.GET[:token]) @resource = args[:resource] @model = args[:model] || resource_class @user = @controller.current_user @controller.current_user ||= GuestUser.new # if not signed in but authorized @controller.store_location end |
Class Method Details
.add_before_filter(controller_class, method, **args) ⇒ Object
8 9 10 11 12 |
# File 'lib/adeia/controller_resource.rb', line 8 def self.add_before_filter(controller_class, method, **args) controller_class.send(:before_action, args.slice(:only, :except, :if, :unless)) do |controller| ControllerResource.send(method, controller, **args) end end |
.get_controller_and_resource(element, resource) ⇒ Object
29 30 31 32 33 34 35 36 37 38 |
# File 'lib/adeia/controller_resource.rb', line 29 def self.get_controller_and_resource(element, resource) if element.is_a? String return element, resource elsif element.is_a? ActiveRecord::Base return controller_name(element), element elsif element.is_a? Array resource = element.second return "#{element.first}/#{controller_name(resource)}", resource end end |
.load_resource_or_records_and_authorize(controller, **args) ⇒ Object
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/adeia/controller_resource.rb', line 14 def self.(controller, **args) case controller.action_name when "index" controller.(**args) when "show", "edit", "update", "destroy" controller.(**args) else controller.(**args) end end |
.require_login(controller, **args) ⇒ Object
25 26 27 |
# File 'lib/adeia/controller_resource.rb', line 25 def self.require_login(controller, **args) controller.require_login! end |
Instance Method Details
#authorization ⇒ Object
76 77 78 |
# File 'lib/adeia/controller_resource.rb', line 76 def @authorization ||= Authorization.new(@controller_name, @action_name, @token, @resource, @user) end |
#authorize! ⇒ Object
80 81 82 |
# File 'lib/adeia/controller_resource.rb', line 80 def . end |
#authorized?(method) ⇒ Boolean
88 89 90 |
# File 'lib/adeia/controller_resource.rb', line 88 def (method) @controller.instance_variable_get(var_name(method)) || @controller.instance_variable_set(var_name(method), .send(method)) end |
#check_permissions! ⇒ Object
84 85 86 |
# File 'lib/adeia/controller_resource.rb', line 84 def . end |
#load_records ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/adeia/controller_resource.rb', line 61 def load_records rights = .read_rights.merge(.token_rights(:read)) { |key, v1, v2| v1 + v2 } rights, resource_ids = rights[:rights], rights[:resource_ids] @records ||= if rights.any? { |r| r. == "all_entries" } @model.all elsif rights.any? { |r| r. == "on_ownerships" } @model.where("user_id = ? OR id IN (?)", @user.id, resource_ids) elsif rights.any? { |r| r. == "on_entry" } @model.where(id: resource_ids) else @model.none end @controller.instance_variable_set("@#{resource_name.pluralize}", @records) end |
#load_resource ⇒ Object
52 53 54 55 56 57 58 59 |
# File 'lib/adeia/controller_resource.rb', line 52 def load_resource begin @resource ||= @model.find(@controller.params.fetch(:id)) @controller.instance_variable_set("@#{resource_name}", @resource) rescue KeyError raise MissingParams.new(:id) end end |