Class: KeycloakAdmin::ClientAuthzPermissionClient

Inherits:
Client
  • Object
show all
Defined in:
lib/keycloak-admin/client/client_authz_permission_client.rb

Instance Method Summary collapse

Methods inherited from Client

#create_payload, #created_id, #current_token, #execute_http, #headers, #server_url

Constructor Details

#initialize(configuration, realm_client, client_id, type, resource_id = nil) ⇒ ClientAuthzPermissionClient

Returns a new instance of ClientAuthzPermissionClient.

Raises:

  • (ArgumentError)


4
5
6
7
8
9
10
11
12
13
# File 'lib/keycloak-admin/client/client_authz_permission_client.rb', line 4

def initialize(configuration, realm_client, client_id, type, resource_id = nil)
  super(configuration)
  raise ArgumentError.new("realm must be defined") unless realm_client.name_defined?
  raise ArgumentError.new("bad permission type") if !resource_id && !%i[resource scope].include?(type.to_sym)

  @realm_client = realm_client
  @client_id = client_id
  @type = type
  @resource_id = resource_id
end

Instance Method Details

#authz_permission_url(client_id, resource_id = nil, type = nil, id = nil) ⇒ Object



57
58
59
60
61
62
63
64
65
# File 'lib/keycloak-admin/client/client_authz_permission_client.rb', line 57

def authz_permission_url(client_id, resource_id = nil, type = nil, id = nil)
  if resource_id
    "#{@realm_client.realm_admin_url}/clients/#{encode_segment(client_id)}/authz/resource-server/resource/#{encode_segment(resource_id)}/permissions"
  elsif id
    "#{@realm_client.realm_admin_url}/clients/#{encode_segment(client_id)}/authz/resource-server/permission/#{encode_segment(type)}/#{encode_segment(id)}"
  else
    "#{@realm_client.realm_admin_url}/clients/#{encode_segment(client_id)}/authz/resource-server/permission/#{encode_segment(type)}"
  end
end

#build(name, description, decision_strategy, logic, resources, policies, scopes, resource_type) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/keycloak-admin/client/client_authz_permission_client.rb', line 67

def build(name, description, decision_strategy, logic, resources, policies, scopes, resource_type)
  policy                   = ClientAuthzPermissionRepresentation.new
  policy.name              = name
  policy.description       = description
  policy.type              = @type
  policy.decision_strategy = decision_strategy
  policy.resource_type     = resource_type
  policy.resources         = resources
  policy.policies          = policies
  policy.scopes            = scopes
  policy.logic             = logic
  policy
end

#create!(name, description, decision_strategy, logic = "POSITIVE", resources = [], policies = [], scopes = [], resource_type = nil) ⇒ Object



30
31
32
33
# File 'lib/keycloak-admin/client/client_authz_permission_client.rb', line 30

def create!(name, description, decision_strategy,logic = "POSITIVE", resources = [], policies = [], scopes = [], resource_type = nil)
  response = save(build(name, description, decision_strategy, logic, resources, policies, scopes, resource_type))
  ClientAuthzPermissionRepresentation.from_hash(JSON.parse(response))
end

#delete(permission_id) ⇒ Object



15
16
17
18
19
20
# File 'lib/keycloak-admin/client/client_authz_permission_client.rb', line 15

def delete(permission_id)
  execute_http do
    resource(authz_permission_url(@client_id, nil, @type, permission_id)).delete(headers)
  end
  true
end

#find_by(name, resource_param, scope = nil) ⇒ Object



22
23
24
25
26
27
28
# File 'lib/keycloak-admin/client/client_authz_permission_client.rb', line 22

def find_by(name, resource_param, scope = nil)
  response = execute_http do
    url = "#{authz_permission_url(@client_id)}?#{build_query(name: name, resource: resource_param, type: @type, scope: scope, deep: true, first: 0, max: 100)}"
    resource(url).get(headers)
  end
  JSON.parse(response).map { |role_as_hash| ClientAuthzPermissionRepresentation.from_hash(role_as_hash) }
end

#get(permission_id) ⇒ Object



50
51
52
53
54
55
# File 'lib/keycloak-admin/client/client_authz_permission_client.rb', line 50

def get(permission_id)
  response = execute_http do
    resource(authz_permission_url(@client_id, nil, @type, permission_id)).get(headers)
  end
  ClientAuthzPermissionRepresentation.from_hash(JSON.parse(response))
end

#listObject



43
44
45
46
47
48
# File 'lib/keycloak-admin/client/client_authz_permission_client.rb', line 43

def list
  response = execute_http do
    resource(authz_permission_url(@client_id, @resource_id)).get(headers)
  end
  JSON.parse(response).map { |role_as_hash| ClientAuthzPermissionRepresentation.from_hash(role_as_hash) }
end

#save(permission_representation) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/keycloak-admin/client/client_authz_permission_client.rb', line 35

def save(permission_representation)
  execute_http do
    resource(authz_permission_url(@client_id, nil, permission_representation.type)).post(
      create_payload(permission_representation), headers
    )
  end
end