Module: Unimatrix::Authorization

Defined in:
lib/unimatrix/authorization/parser.rb,
lib/unimatrix/authorization/policy.rb,
lib/unimatrix/authorization/railtie.rb,
lib/unimatrix/authorization/request.rb,
lib/unimatrix/authorization/resource.rb,
lib/unimatrix/authorization/response.rb,
lib/unimatrix/authorization/operation.rb,
lib/unimatrix/authorization/resource_owner.rb,
lib/unimatrix/authorization/resource_server.rb,
lib/unimatrix/authorization/client_credentials_grant.rb,
lib/unimatrix/authorization/filters/requires_policies.rb

Defined Under Namespace

Modules: ClassMethods Classes: ClientCredentialsGrant, Operation, Parser, Policy, Railtie, Request, RequiresPolicies, Resource, ResourceOwner, ResourceServer, Response

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(controller) ⇒ Object



70
71
72
# File 'lib/unimatrix/authorization/filters/requires_policies.rb', line 70

def self.included( controller )
  controller.extend( ClassMethods )
end

Instance Method Details

#policiesObject



78
79
80
81
82
83
84
85
86
87
88
# File 'lib/unimatrix/authorization/filters/requires_policies.rb', line 78

def policies
  @policies ||= begin
    # Used by Archivist requires_permission filter. TODO: deprecate
    retrieve_policies( 
      @resource_name, 
      params[ :access_token ], 
      realm_uuid,
      @resource_server 
    )
  end
end

#policies=(attributes) ⇒ Object



74
75
76
# File 'lib/unimatrix/authorization/filters/requires_policies.rb', line 74

def policies=( attributes )
  @policies = attributes
end

#request_policies(resource_name, access_token, realm_uuid, resource_server) ⇒ Object



102
103
104
105
106
107
108
109
110
# File 'lib/unimatrix/authorization/filters/requires_policies.rb', line 102

def request_policies( resource_name, access_token, realm_uuid, resource_server )
  if resource_name && access_token
    realm_uuid = realm_uuid || '*'
    Operation.new( '/policies' ).where(
      access_token: access_token,
      resource: "realm/#{ realm_uuid }::#{ resource_server }::#{ resource_name }/*"
    ).read
  end
end

#retrieve_policies(resource_name, access_token, realm_uuid, resource_server) ⇒ Object

In Rails app, this is overwritten by #retrieve_policies in railtie.rb



91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/unimatrix/authorization/filters/requires_policies.rb', line 91

def retrieve_policies( resource_name, access_token, realm_uuid, resource_server )
  if resource_name && access_token
    key = params.respond_to?( 'to_unsafe_h' ) ? 
          params.to_unsafe_h.sort.to_s : 
          params.sort.to_s
          
    Rails.cache.fetch(
      Digest::SHA1.hexdigest( key ),
      expires_in: 1.minute
    ) do
      request_policies( resource_name, access_token, realm_uuid, resource_server )
    end
  end
end