Skip to content

Commit 4a16ee7

Browse files
KyriosGN0sschu
andauthored
support enabling fine grained permssion in realm resource (#1268)
* feat: add admin_permissions_enabled to keycloak_realm resource Signed-off-by: AvivGuiser <[email protected]> * feat: add admin permission enabled to realm resoruce Signed-off-by: AvivGuiser <[email protected]> * add to data source and gate behind 26.2 Signed-off-by: AvivGuiser <[email protected]> --------- Signed-off-by: AvivGuiser <[email protected]> Co-authored-by: Sebastian Schuster <[email protected]>
1 parent be3b093 commit 4a16ee7

File tree

4 files changed

+79
-3
lines changed

4 files changed

+79
-3
lines changed

keycloak/realm.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ package keycloak
33
import (
44
"context"
55
"fmt"
6-
"github.com/keycloak/terraform-provider-keycloak/keycloak/types"
76
"strings"
7+
8+
"github.com/keycloak/terraform-provider-keycloak/keycloak/types"
89
)
910

1011
type Key struct {
@@ -97,6 +98,8 @@ type Realm struct {
9798
MaxFailureWaitSeconds int `json:"maxFailureWaitSeconds"` //Max Wait
9899
MaxDeltaTimeSeconds int `json:"maxDeltaTimeSeconds"` //Failure Reset Time
99100

101+
AdminPermissionsEnabled bool `json:"adminPermissionsEnabled,omitempty"`
102+
100103
PasswordPolicy string `json:"passwordPolicy"`
101104

102105
//flow bindings

provider/data_source_keycloak_realm.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package provider
22

33
import (
44
"context"
5+
56
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
67
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
78
"github.com/keycloak/terraform-provider-keycloak/keycloak"
@@ -127,6 +128,10 @@ func dataSourceKeycloakRealm() *schema.Resource {
127128
Type: schema.TypeBool,
128129
Computed: true,
129130
},
131+
"admin_permissions_enabled": {
132+
Type: schema.TypeBool,
133+
Computed: true,
134+
},
130135

131136
// Login Config
132137

provider/resource_keycloak_realm.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,11 @@ func resourceKeycloakRealm() *schema.Resource {
667667
Optional: true,
668668
},
669669

670+
"admin_permissions_enabled": {
671+
Type: schema.TypeBool,
672+
Optional: true,
673+
},
674+
670675
// default default client scopes
671676
"default_default_client_scopes": {
672677
Type: schema.TypeSet,
@@ -1109,6 +1114,8 @@ func getRealmFromData(data *schema.ResourceData, keycloakVersion *version.Versio
11091114
}
11101115
realm.DefaultOptionalClientScopes = defaultOptionalClientScopes
11111116

1117+
realm.AdminPermissionsEnabled = data.Get("admin_permissions_enabled").(bool)
1118+
11121119
//OTPPolicy
11131120
if v, ok := data.GetOk("otp_policy"); ok {
11141121
otpPolicy := v.([]interface{})[0].(map[string]interface{})
@@ -1259,6 +1266,7 @@ func setRealmData(data *schema.ResourceData, realm *keycloak.Realm, keycloakVers
12591266
data.Set("display_name_html", realm.DisplayNameHtml)
12601267
data.Set("user_managed_access", realm.UserManagedAccess)
12611268
data.Set("organizations_enabled", realm.OrganizationsEnabled)
1269+
data.Set("admin_permissions_enabled", realm.AdminPermissionsEnabled)
12621270

12631271
// Login Config
12641272
data.Set("registration_allowed", realm.RegistrationAllowed)

provider/resource_keycloak_realm_test.go

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ package provider
22

33
import (
44
"fmt"
5+
"regexp"
6+
"testing"
7+
58
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
69
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
710
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
811
"github.com/keycloak/terraform-provider-keycloak/keycloak"
9-
"regexp"
10-
"testing"
1112
)
1213

1314
func TestAccKeycloakRealm_basic(t *testing.T) {
@@ -977,6 +978,65 @@ func testAccCheckKeycloakRealm_default_client_scopes(resourceName string, defaul
977978
}
978979
}
979980

981+
func TestAccKeycloakRealm_admin_permissions_enabled(t *testing.T) {
982+
if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_26_2); !ok {
983+
t.Skip()
984+
}
985+
986+
realmName := acctest.RandomWithPrefix("tf-acc")
987+
988+
realm := &keycloak.Realm{
989+
Realm: realmName,
990+
}
991+
992+
resource.Test(t, resource.TestCase{
993+
ProviderFactories: testAccProviderFactories,
994+
PreCheck: func() { testAccPreCheck(t) },
995+
CheckDestroy: testAccCheckKeycloakRealmDestroy(),
996+
Steps: []resource.TestStep{
997+
{
998+
ResourceName: "keycloak_realm.realm",
999+
ImportStateId: realmName,
1000+
ImportState: true,
1001+
Config: testKeycloakRealm_admin_permission_enabled(realmName),
1002+
PreConfig: func() {
1003+
err := keycloakClient.NewRealm(testCtx, realm)
1004+
if err != nil {
1005+
t.Fatal(err)
1006+
}
1007+
},
1008+
Check: testAccCheckKeycloakRealm_admin_permissions_enabled(realmName),
1009+
},
1010+
},
1011+
})
1012+
}
1013+
1014+
func testKeycloakRealm_admin_permission_enabled(realm string) string {
1015+
1016+
return fmt.Sprintf(`
1017+
resource "keycloak_realm" "realm" {
1018+
realm = "%s"
1019+
enabled = true
1020+
admin_permissions_enabled = true
1021+
}
1022+
`, realm)
1023+
}
1024+
1025+
func testAccCheckKeycloakRealm_admin_permissions_enabled(resourceName string) resource.TestCheckFunc {
1026+
return func(s *terraform.State) error {
1027+
realm, err := getRealmFromState(s, resourceName)
1028+
if err != nil {
1029+
return err
1030+
}
1031+
1032+
if !realm.AdminPermissionsEnabled {
1033+
return fmt.Errorf("expected realm %s to have admin permissions enabled but was %t", realm.Realm, realm.AdminPermissionsEnabled)
1034+
}
1035+
1036+
return nil
1037+
}
1038+
}
1039+
9801040
func TestAccKeycloakRealm_webauthn(t *testing.T) {
9811041
realmName := acctest.RandomWithPrefix("tf-acc")
9821042
realmDisplayName := acctest.RandomWithPrefix("tf-acc")

0 commit comments

Comments
 (0)