Skip to content

Commit b0e2750

Browse files
committed
Added tests for dynamic group from SSO
1 parent 9c76193 commit b0e2750

File tree

1 file changed

+113
-0
lines changed

1 file changed

+113
-0
lines changed

internal/server/rbac_test.go

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,119 @@ func TestAuthorizeAccessWithRoleHierarchy(t *testing.T) {
723723
}
724724
}
725725

726+
func TestAuthorizeAccessWithDynamicGroups(t *testing.T) {
727+
t.Parallel()
728+
729+
rbacConfig := &types.RBACConfig{
730+
Enabled: true,
731+
Groups: map[string][]string{},
732+
Roles: map[string][]types.RBACPermission{
733+
"read": {types.PermissionList},
734+
},
735+
Grants: []types.RBACGrant{
736+
{
737+
Description: "grant via dynamic group",
738+
Users: []string{"group:sso_devs"},
739+
Roles: []string{"read"},
740+
Targets: []string{"/test"},
741+
},
742+
},
743+
}
744+
745+
logger := createTestLogger()
746+
serverConfig := &types.ServerConfig{
747+
GlobalConfig: types.GlobalConfig{AdminUser: "admin"},
748+
}
749+
750+
rbacManager, err := NewRBACHandler(logger, rbacConfig, serverConfig)
751+
if err != nil {
752+
t.Fatalf("failed to create RBACManager: %v", err)
753+
}
754+
755+
t.Run("denied when no dynamic groups passed", func(t *testing.T) {
756+
t.Parallel()
757+
// user is not part of any configured group, and no dynamic groups provided
758+
allowed, err := rbacManager.Authorize("user1", types.AppPathDomain{Path: "/test", Domain: ""}, "rbac:test", types.PermissionList, []string{})
759+
if err != nil {
760+
t.Fatalf("unexpected error: %v", err)
761+
}
762+
if allowed {
763+
t.Fatalf("expected authorization to be denied without dynamic groups")
764+
}
765+
})
766+
767+
t.Run("allowed when dynamic group passed", func(t *testing.T) {
768+
t.Parallel()
769+
// user is considered part of sso_devs via dynamic groups argument
770+
allowed, err := rbacManager.Authorize("user1", types.AppPathDomain{Path: "/test", Domain: ""}, "rbac:test", types.PermissionList, []string{"sso_devs"})
771+
if err != nil {
772+
t.Fatalf("unexpected error: %v", err)
773+
}
774+
if !allowed {
775+
t.Fatalf("expected authorization to be allowed with dynamic group membership")
776+
}
777+
})
778+
}
779+
780+
func TestAuthorizeAccessWithDynamicAndConfiguredGroups(t *testing.T) {
781+
t.Parallel()
782+
783+
rbacConfig := &types.RBACConfig{
784+
Enabled: true,
785+
Groups: map[string][]string{
786+
"devs": {"user2"},
787+
},
788+
Roles: map[string][]types.RBACPermission{
789+
"read": {types.PermissionList},
790+
},
791+
Grants: []types.RBACGrant{
792+
{
793+
Description: "grant via either configured or dynamic group",
794+
Users: []string{"group:devs", "group:sso_devs"},
795+
Roles: []string{"read"},
796+
Targets: []string{"/test"},
797+
},
798+
},
799+
}
800+
801+
logger := createTestLogger()
802+
serverConfig := &types.ServerConfig{
803+
GlobalConfig: types.GlobalConfig{AdminUser: "admin"},
804+
}
805+
806+
rbacManager, err := NewRBACHandler(logger, rbacConfig, serverConfig)
807+
if err != nil {
808+
t.Fatalf("failed to create RBACManager: %v", err)
809+
}
810+
811+
// user1 not in configured groups; denied without dynamic groups
812+
allowed, err := rbacManager.Authorize("user1", types.AppPathDomain{Path: "/test", Domain: ""}, "rbac:test", types.PermissionList, []string{})
813+
if err != nil {
814+
t.Fatalf("unexpected error: %v", err)
815+
}
816+
if allowed {
817+
t.Fatalf("expected user1 to be denied without dynamic groups")
818+
}
819+
820+
// user1 allowed when dynamic group provided
821+
allowed, err = rbacManager.Authorize("user1", types.AppPathDomain{Path: "/test", Domain: ""}, "rbac:test", types.PermissionList, []string{"sso_devs"})
822+
if err != nil {
823+
t.Fatalf("unexpected error: %v", err)
824+
}
825+
if !allowed {
826+
t.Fatalf("expected user1 to be allowed with dynamic group")
827+
}
828+
829+
// user2 is in configured group; allowed even without dynamic groups
830+
allowed, err = rbacManager.Authorize("user2", types.AppPathDomain{Path: "/test", Domain: ""}, "rbac:test", types.PermissionList, []string{})
831+
if err != nil {
832+
t.Fatalf("unexpected error: %v", err)
833+
}
834+
if !allowed {
835+
t.Fatalf("expected user2 to be allowed via configured group")
836+
}
837+
}
838+
726839
func TestUpdateRBACConfig(t *testing.T) {
727840
t.Parallel()
728841

0 commit comments

Comments
 (0)