Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add resource keycloak_user_roles #315

Merged
merged 4 commits into from
Jun 28, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 0 additions & 25 deletions keycloak/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,31 +90,6 @@ func (keycloakClient *KeycloakClient) GetUsers(realmId string) ([]*User, error)
return users, nil
}

func (keycloakClient *KeycloakClient) GetUsersRoles(realmId string) ([]*Role, error) {
var roles []*Role
var users []*User

err := keycloakClient.get(fmt.Sprintf("/realms/%s/users", realmId), &users, nil)
if err != nil {
return nil, err
}

for _, user := range users {
var roles_user []*Role
err = keycloakClient.get(fmt.Sprintf("/realms/%s/users/%s/roles", realmId, user.Id), &roles_user, nil)
if err != nil {
return nil, err
}
roles = append(roles, roles_user...)
}

for _, role := range roles {
role.RealmId = realmId
}

return roles, nil
}

func (keycloakClient *KeycloakClient) GetUser(realmId, id string) (*User, error) {
var user User

Expand Down
52 changes: 52 additions & 0 deletions keycloak/user_role_mappings.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package keycloak

import "fmt"

// struct for the MappingRepresentation
// https://www.keycloak.org/docs-api/8.0/rest-api/index.html#_mappingsrepresentation
type UserRoleMapping struct {
ClientMappings map[string]*ClientRoleMapping `json:"clientMappings"`
RealmMappings []*Role `json:"realmMappings"`
}

// struct for the ClientMappingRepresentation
// https://www.keycloak.org/docs-api/8.0/rest-api/index.html#_clientmappingsrepresentation
type ClientRoleMapping struct {
Client string `json:"client"`
Id string `json:"id"`
Mappings []*Role `json:"mappings"`
}

func (keycloakClient *KeycloakClient) GetUserRoleMappings(realmId string, userId string) (*UserRoleMapping, error) {
var roleMapping *UserRoleMapping
err := keycloakClient.get(fmt.Sprintf("/realms/%s/users/%s/role-mappings", realmId, userId), &roleMapping, nil)
if err != nil {
return nil, err
}

return roleMapping, nil
}

func (keycloakClient *KeycloakClient) AddRealmRolesToUser(realmId, userId string, roles []*Role) error {
_, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm", realmId, userId), roles)

return err
}

func (keycloakClient *KeycloakClient) AddClientRolesToUser(realmId, userId, clientId string, roles []*Role) error {
_, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", realmId, userId, clientId), roles)

return err
}

func (keycloakClient *KeycloakClient) RemoveRealmRolesFromUser(realmId, userId string, roles []*Role) error {
err := keycloakClient.delete(fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm", realmId, userId), roles)

return err
}

func (keycloakClient *KeycloakClient) RemoveClientRolesFromUser(realmId, userId, clientId string, roles []*Role) error {
err := keycloakClient.delete(fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", realmId, userId, clientId), roles)

return err
}
1 change: 1 addition & 0 deletions provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ func KeycloakProvider() *schema.Provider {
"keycloak_default_groups": resourceKeycloakDefaultGroups(),
"keycloak_group_roles": resourceKeycloakGroupRoles(),
"keycloak_user": resourceKeycloakUser(),
"keycloak_user_roles": resourceKeycloakUserRoles(),
"keycloak_openid_client": resourceKeycloakOpenidClient(),
"keycloak_openid_client_scope": resourceKeycloakOpenidClientScope(),
"keycloak_ldap_user_federation": resourceKeycloakLdapUserFederation(),
Expand Down
Loading