@@ -45,11 +45,15 @@ type UserRestHandler interface {
45
45
UpdateUser (w http.ResponseWriter , r * http.Request )
46
46
GetById (w http.ResponseWriter , r * http.Request )
47
47
GetAll (w http.ResponseWriter , r * http.Request )
48
+ GetAllV2 (w http.ResponseWriter , r * http.Request )
48
49
DeleteUser (w http.ResponseWriter , r * http.Request )
50
+ GetAllDetailedUsers (w http.ResponseWriter , r * http.Request )
49
51
FetchRoleGroupById (w http.ResponseWriter , r * http.Request )
50
52
CreateRoleGroup (w http.ResponseWriter , r * http.Request )
51
53
UpdateRoleGroup (w http.ResponseWriter , r * http.Request )
52
54
FetchRoleGroups (w http.ResponseWriter , r * http.Request )
55
+ FetchRoleGroupsV2 (w http.ResponseWriter , r * http.Request )
56
+ FetchDetailedRoleGroups (w http.ResponseWriter , r * http.Request )
53
57
FetchRoleGroupsByName (w http.ResponseWriter , r * http.Request )
54
58
DeleteRoleGroup (w http.ResponseWriter , r * http.Request )
55
59
CheckUserRoles (w http.ResponseWriter , r * http.Request )
@@ -301,7 +305,7 @@ func (handler UserRestHandlerImpl) GetById(w http.ResponseWriter, r *http.Reques
301
305
common .WriteJsonResp (w , err , res , http .StatusOK )
302
306
}
303
307
304
- func (handler UserRestHandlerImpl ) GetAll (w http.ResponseWriter , r * http.Request ) {
308
+ func (handler UserRestHandlerImpl ) GetAllV2 (w http.ResponseWriter , r * http.Request ) {
305
309
var decoder = schema .NewDecoder ()
306
310
userId , err := handler .userService .GetLoggedInUser (r )
307
311
if userId == 0 || err != nil {
@@ -372,7 +376,95 @@ func (handler UserRestHandlerImpl) GetAll(w http.ResponseWriter, r *http.Request
372
376
373
377
common .WriteJsonResp (w , err , res , http .StatusOK )
374
378
}
379
+ func (handler UserRestHandlerImpl ) GetAll (w http.ResponseWriter , r * http.Request ) {
380
+ userId , err := handler .userService .GetLoggedInUser (r )
381
+ if userId == 0 || err != nil {
382
+ common .WriteJsonResp (w , err , "Unauthorized User" , http .StatusUnauthorized )
383
+ return
384
+ }
375
385
386
+ // RBAC enforcer applying
387
+ token := r .Header .Get ("token" )
388
+ //checking superAdmin access
389
+ isAuthorised := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionGet , "*" )
390
+ if ! isAuthorised {
391
+ user , err := handler .userService .GetById (userId )
392
+ if err != nil {
393
+ handler .logger .Errorw ("error in getting user by id" , "err" , err )
394
+ common .WriteJsonResp (w , err , "" , http .StatusInternalServerError )
395
+ return
396
+ }
397
+ var roleFilters []bean.RoleFilter
398
+ if len (user .Groups ) > 0 {
399
+ groupRoleFilters , err := handler .userService .GetRoleFiltersByGroupNames (user .Groups )
400
+ if err != nil {
401
+ handler .logger .Errorw ("Error in getting role filters by group names" , "err" , err , "groupNames" , user .Groups )
402
+ common .WriteJsonResp (w , err , "" , http .StatusInternalServerError )
403
+ return
404
+ }
405
+ if len (groupRoleFilters ) > 0 {
406
+ roleFilters = append (roleFilters , groupRoleFilters ... )
407
+ }
408
+ }
409
+ if user .RoleFilters != nil && len (user .RoleFilters ) > 0 {
410
+ roleFilters = append (roleFilters , user .RoleFilters ... )
411
+ }
412
+ if len (roleFilters ) > 0 {
413
+ for _ , filter := range roleFilters {
414
+ if len (filter .Team ) > 0 {
415
+ if ok := handler .enforcer .Enforce (token , casbin .ResourceUser , casbin .ActionGet , filter .Team ); ok {
416
+ isAuthorised = true
417
+ break
418
+ }
419
+ }
420
+ if filter .Entity == bean .CLUSTER_ENTITIY {
421
+ if ok := handler .userCommonService .CheckRbacForClusterEntity (filter .Cluster , filter .Namespace , filter .Group , filter .Kind , filter .Resource , token , handler .CheckManagerAuth ); ok {
422
+ isAuthorised = true
423
+ break
424
+ }
425
+ }
426
+ }
427
+ }
428
+ }
429
+ if ! isAuthorised {
430
+ common .WriteJsonResp (w , errors .New ("unauthorized" ), nil , http .StatusForbidden )
431
+ return
432
+ }
433
+ res , err := handler .userService .GetAll ()
434
+ if err != nil {
435
+ handler .logger .Errorw ("service err, GetAll" , "err" , err )
436
+ common .WriteJsonResp (w , err , "Failed to Get" , http .StatusInternalServerError )
437
+ return
438
+ }
439
+
440
+ common .WriteJsonResp (w , err , res , http .StatusOK )
441
+ }
442
+
443
+ func (handler UserRestHandlerImpl ) GetAllDetailedUsers (w http.ResponseWriter , r * http.Request ) {
444
+ userId , err := handler .userService .GetLoggedInUser (r )
445
+ if userId == 0 || err != nil {
446
+ common .WriteJsonResp (w , err , "Unauthorized User" , http .StatusUnauthorized )
447
+ return
448
+ }
449
+
450
+ token := r .Header .Get ("token" )
451
+ isActionUserSuperAdmin := false
452
+ if ok := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionGet , "*" ); ok {
453
+ isActionUserSuperAdmin = true
454
+ }
455
+ if ! isActionUserSuperAdmin {
456
+ common .WriteJsonResp (w , errors .New ("unauthorized" ), nil , http .StatusForbidden )
457
+ return
458
+ }
459
+ res , err := handler .userService .GetAllDetailedUsers ()
460
+ if err != nil {
461
+ handler .logger .Errorw ("service err, GetAllDetailedUsers" , "err" , err )
462
+ common .WriteJsonResp (w , err , "Failed to Get" , http .StatusInternalServerError )
463
+ return
464
+ }
465
+
466
+ common .WriteJsonResp (w , err , res , http .StatusOK )
467
+ }
376
468
func (handler UserRestHandlerImpl ) DeleteUser (w http.ResponseWriter , r * http.Request ) {
377
469
userId , err := handler .userService .GetLoggedInUser (r )
378
470
if userId == 0 || err != nil {
@@ -621,7 +713,7 @@ func (handler UserRestHandlerImpl) UpdateRoleGroup(w http.ResponseWriter, r *htt
621
713
common .WriteJsonResp (w , err , res , http .StatusOK )
622
714
}
623
715
624
- func (handler UserRestHandlerImpl ) FetchRoleGroups (w http.ResponseWriter , r * http.Request ) {
716
+ func (handler UserRestHandlerImpl ) FetchRoleGroupsV2 (w http.ResponseWriter , r * http.Request ) {
625
717
var decoder = schema .NewDecoder ()
626
718
userId , err := handler .userService .GetLoggedInUser (r )
627
719
if userId == 0 || err != nil {
@@ -693,6 +785,94 @@ func (handler UserRestHandlerImpl) FetchRoleGroups(w http.ResponseWriter, r *htt
693
785
common .WriteJsonResp (w , err , res , http .StatusOK )
694
786
}
695
787
788
+ func (handler UserRestHandlerImpl ) FetchRoleGroups (w http.ResponseWriter , r * http.Request ) {
789
+ userId , err := handler .userService .GetLoggedInUser (r )
790
+ if userId == 0 || err != nil {
791
+ common .WriteJsonResp (w , err , "Unauthorized User" , http .StatusUnauthorized )
792
+ return
793
+ }
794
+ // RBAC enforcer applying
795
+ token := r .Header .Get ("token" )
796
+ //checking superAdmin access
797
+ isAuthorised := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionGet , "*" )
798
+ if ! isAuthorised {
799
+ user , err := handler .userService .GetById (userId )
800
+ if err != nil {
801
+ handler .logger .Errorw ("error in getting user by id" , "err" , err )
802
+ common .WriteJsonResp (w , err , "" , http .StatusInternalServerError )
803
+ return
804
+ }
805
+ var roleFilters []bean.RoleFilter
806
+ if len (user .Groups ) > 0 {
807
+ groupRoleFilters , err := handler .userService .GetRoleFiltersByGroupNames (user .Groups )
808
+ if err != nil {
809
+ handler .logger .Errorw ("Error in getting role filters by group names" , "err" , err , "groupNames" , user .Groups )
810
+ common .WriteJsonResp (w , err , "" , http .StatusInternalServerError )
811
+ return
812
+ }
813
+ if len (groupRoleFilters ) > 0 {
814
+ roleFilters = append (roleFilters , groupRoleFilters ... )
815
+ }
816
+ }
817
+ if user .RoleFilters != nil && len (user .RoleFilters ) > 0 {
818
+ roleFilters = append (roleFilters , user .RoleFilters ... )
819
+ }
820
+ if len (roleFilters ) > 0 {
821
+ for _ , filter := range roleFilters {
822
+ if len (filter .Team ) > 0 {
823
+ if ok := handler .enforcer .Enforce (token , casbin .ResourceUser , casbin .ActionGet , filter .Team ); ok {
824
+ isAuthorised = true
825
+ break
826
+ }
827
+ }
828
+ if filter .Entity == bean .CLUSTER_ENTITIY {
829
+ if isValidAuth := handler .userCommonService .CheckRbacForClusterEntity (filter .Cluster , filter .Namespace , filter .Group , filter .Kind , filter .Resource , token , handler .CheckManagerAuth ); isValidAuth {
830
+ isAuthorised = true
831
+ break
832
+ }
833
+ }
834
+
835
+ }
836
+ }
837
+ }
838
+ if ! isAuthorised {
839
+ common .WriteJsonResp (w , errors .New ("unauthorized" ), nil , http .StatusForbidden )
840
+ return
841
+ }
842
+ res , err := handler .roleGroupService .FetchRoleGroups ()
843
+ if err != nil {
844
+ handler .logger .Errorw ("service err, FetchRoleGroups" , "err" , err )
845
+ common .WriteJsonResp (w , err , "" , http .StatusInternalServerError )
846
+ return
847
+ }
848
+ common .WriteJsonResp (w , err , res , http .StatusOK )
849
+ }
850
+
851
+ func (handler UserRestHandlerImpl ) FetchDetailedRoleGroups (w http.ResponseWriter , r * http.Request ) {
852
+ userId , err := handler .userService .GetLoggedInUser (r )
853
+ if userId == 0 || err != nil {
854
+ common .WriteJsonResp (w , err , "Unauthorized User" , http .StatusUnauthorized )
855
+ return
856
+ }
857
+ token := r .Header .Get ("token" )
858
+ isActionUserSuperAdmin := false
859
+ if ok := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionGet , "*" ); ok {
860
+ isActionUserSuperAdmin = true
861
+ }
862
+ if ! isActionUserSuperAdmin {
863
+ common .WriteJsonResp (w , errors .New ("unauthorized" ), nil , http .StatusForbidden )
864
+ return
865
+ }
866
+
867
+ res , err := handler .roleGroupService .FetchDetailedRoleGroups ()
868
+ if err != nil {
869
+ handler .logger .Errorw ("service err, FetchRoleGroups" , "err" , err )
870
+ common .WriteJsonResp (w , err , "" , http .StatusInternalServerError )
871
+ return
872
+ }
873
+ common .WriteJsonResp (w , err , res , http .StatusOK )
874
+ }
875
+
696
876
func (handler UserRestHandlerImpl ) FetchRoleGroupsByName (w http.ResponseWriter , r * http.Request ) {
697
877
userId , err := handler .userService .GetLoggedInUser (r )
698
878
if userId == 0 || err != nil {
0 commit comments