@@ -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+
726839func TestUpdateRBACConfig (t * testing.T ) {
727840 t .Parallel ()
728841
0 commit comments