@@ -38,7 +38,7 @@ import (
3838type UserService interface {
3939 CreateUser (userInfo * bean.UserInfo , token string , managerAuth func (token string , object string ) bool ) ([]* bean.UserInfo , error )
4040 SelfRegisterUserIfNotExists (userInfo * bean.UserInfo ) ([]* bean.UserInfo , error )
41- UpdateUser (userInfo * bean.UserInfo , token string , managerAuth func (token string , object string ) bool ) (* bean.UserInfo , bool , []string , error )
41+ UpdateUser (userInfo * bean.UserInfo , token string , managerAuth func (token string , object string ) bool ) (* bean.UserInfo , bool , bool , []string , error )
4242 GetById (id int32 ) (* bean.UserInfo , error )
4343 GetAll () ([]bean.UserInfo , error )
4444 GetAllDetailedUsers () ([]bean.UserInfo , error )
@@ -268,7 +268,7 @@ func (impl UserServiceImpl) updateUserIfExists(userInfo *bean.UserInfo, dbUser *
268268 updateUserInfo .Groups = impl .mergeGroups (updateUserInfo .Groups , userInfo .Groups )
269269 updateUserInfo .UserId = userInfo .UserId
270270 updateUserInfo .EmailId = emailId // override case sensitivity
271- updateUserInfo , _ , _ , err = impl .UpdateUser (updateUserInfo , token , managerAuth )
271+ updateUserInfo , _ , _ , _ , err = impl .UpdateUser (updateUserInfo , token , managerAuth )
272272 if err != nil {
273273 impl .logger .Errorw ("error while update user" , "error" , err )
274274 return nil , err
@@ -499,49 +499,50 @@ func (impl UserServiceImpl) mergeGroups(oldGroups []string, newGroups []string)
499499 return groups
500500}
501501
502- func (impl UserServiceImpl ) UpdateUser (userInfo * bean.UserInfo , token string , managerAuth func (token string , object string ) bool ) (* bean.UserInfo , bool , []string , error ) {
502+ func (impl UserServiceImpl ) UpdateUser (userInfo * bean.UserInfo , token string , managerAuth func (token string , object string ) bool ) (* bean.UserInfo , bool , bool , []string , error ) {
503503 //validating if action user is not admin and trying to update user who has super admin polices, return 403
504504 isUserSuperAdmin , err := impl .IsSuperAdmin (int (userInfo .Id ))
505505 if err != nil {
506- return nil , false , nil , err
506+ return nil , false , false , nil , err
507507 }
508508 isActionPerformingUserSuperAdmin , err := impl .IsSuperAdmin (int (userInfo .UserId ))
509509 if err != nil {
510- return nil , false , nil , err
510+ return nil , false , false , nil , err
511511 }
512512 //if request comes to make user as a super admin or user already a super admin (who'is going to be updated), action performing user should have super admin access
513513 if userInfo .SuperAdmin || isUserSuperAdmin {
514514 if ! isActionPerformingUserSuperAdmin {
515515 err = & util.ApiError {HttpStatusCode : http .StatusForbidden , UserMessage : "Invalid request, not allow to update super admin type user" }
516- return nil , false , nil , err
516+ return nil , false , false , nil , err
517517 }
518518 }
519519
520520 dbConnection := impl .userRepository .GetConnection ()
521521 tx , err := dbConnection .Begin ()
522522 if err != nil {
523- return nil , false , nil , err
523+ return nil , false , false , nil , err
524524 }
525525 // Rollback tx on error.
526526 defer tx .Rollback ()
527527
528528 model , err := impl .userRepository .GetByIdIncludeDeleted (userInfo .Id )
529529 if err != nil {
530530 impl .logger .Errorw ("error while fetching user from db" , "error" , err )
531- return nil , false , nil , err
531+ return nil , false , false , nil , err
532532 }
533533
534534 var addedPolicies []casbin2.Policy
535535 var eliminatedPolicies []casbin2.Policy
536536
537537 restrictedGroups := []string {}
538538 rolesChanged := false
539+ groupsModified := false
539540
540541 if userInfo .SuperAdmin == false {
541542 //Starts Role and Mapping
542543 userRoleModels , err := impl .userAuthRepository .GetUserRoleMappingByUserId (model .Id )
543544 if err != nil {
544- return nil , false , nil , err
545+ return nil , false , false , nil , err
545546 }
546547 existingRoleIds := make (map [int ]repository2.UserRoleModel )
547548 eliminatedRoleIds := make (map [int ]* repository2.UserRoleModel )
@@ -554,13 +555,13 @@ func (impl UserServiceImpl) UpdateUser(userInfo *bean.UserInfo, token string, ma
554555 _ , err = impl .validateUserRequest (userInfo )
555556 if err != nil {
556557 err = & util.ApiError {HttpStatusCode : http .StatusBadRequest , UserMessage : "Invalid request, please provide role filters" }
557- return nil , false , nil , err
558+ return nil , false , false , nil , err
558559 }
559560
560561 // DELETE Removed Items
561562 items , err := impl .userCommonService .RemoveRolesAndReturnEliminatedPolicies (userInfo , existingRoleIds , eliminatedRoleIds , tx , token , managerAuth )
562563 if err != nil {
563- return nil , false , nil , err
564+ return nil , false , false , nil , err
564565 }
565566 eliminatedPolicies = append (eliminatedPolicies , items ... )
566567 if len (eliminatedPolicies ) > 0 {
@@ -597,7 +598,7 @@ func (impl UserServiceImpl) UpdateUser(userInfo *bean.UserInfo, token string, ma
597598 roleModel , err := impl .userAuthRepository .GetRoleByFilter (roleFilter .Entity , roleFilter .Team , entityName , environment , roleFilter .Action , roleFilter .AccessType )
598599 if err != nil {
599600 impl .logger .Errorw ("Error in fetching role by filter" , "user" , userInfo )
600- return nil , false , nil , err
601+ return nil , false , false , nil , err
601602 }
602603 if roleModel .Id == 0 {
603604 impl .logger .Debugw ("no role found for given filter" , "filter" , roleFilter )
@@ -607,18 +608,18 @@ func (impl UserServiceImpl) UpdateUser(userInfo *bean.UserInfo, token string, ma
607608 if roleFilter .AccessType == bean .APP_ACCESS_TYPE_HELM {
608609 flag , err := impl .userAuthRepository .CreateDefaultHelmPolicies (roleFilter .Team , entityName , environment , tx )
609610 if err != nil || flag == false {
610- return nil , false , nil , err
611+ return nil , false , false , nil , err
611612 }
612613 } else {
613614 flag , err := impl .userAuthRepository .CreateDefaultPolicies (roleFilter .Team , entityName , environment , tx )
614615 if err != nil || flag == false {
615- return nil , false , nil , err
616+ return nil , false , false , nil , err
616617 }
617618 }
618619 roleModel , err = impl .userAuthRepository .GetRoleByFilter (roleFilter .Entity , roleFilter .Team , entityName , environment , roleFilter .Action , roleFilter .AccessType )
619620 if err != nil {
620621 impl .logger .Errorw ("Error in fetching role by filter" , "user" , userInfo )
621- return nil , false , nil , err
622+ return nil , false , false , nil , err
622623 }
623624 if roleModel .Id == 0 {
624625 impl .logger .Debugw ("no role found for given filter" , "filter" , roleFilter )
@@ -628,12 +629,12 @@ func (impl UserServiceImpl) UpdateUser(userInfo *bean.UserInfo, token string, ma
628629 } else if len (roleFilter .Entity ) > 0 {
629630 flag , err := impl .userAuthRepository .CreateDefaultPoliciesForGlobalEntity (roleFilter .Entity , entityName , roleFilter .Action , tx )
630631 if err != nil || flag == false {
631- return nil , false , nil , err
632+ return nil , false , false , nil , err
632633 }
633634 roleModel , err = impl .userAuthRepository .GetRoleByFilter (roleFilter .Entity , roleFilter .Team , entityName , environment , roleFilter .Action , roleFilter .AccessType )
634635 if err != nil {
635636 impl .logger .Errorw ("Error in fetching role by filter" , "user" , userInfo )
636- return nil , false , nil , err
637+ return nil , false , false , nil , err
637638 }
638639 if roleModel .Id == 0 {
639640 impl .logger .Debugw ("no role found for given filter" , "filter" , roleFilter )
@@ -657,7 +658,7 @@ func (impl UserServiceImpl) UpdateUser(userInfo *bean.UserInfo, token string, ma
657658 userRoleModel .UpdatedOn = time .Now ()
658659 userRoleModel , err = impl .userAuthRepository .CreateUserRoleMapping (userRoleModel , tx )
659660 if err != nil {
660- return nil , false , nil , err
661+ return nil , false , false , nil , err
661662 }
662663 addedPolicies = append (addedPolicies , casbin2.Policy {Type : "g" , Sub : casbin2 .Subject (model .EmailId ), Obj : casbin2 .Object (roleModel .Role )})
663664 }
@@ -672,7 +673,7 @@ func (impl UserServiceImpl) UpdateUser(userInfo *bean.UserInfo, token string, ma
672673 userCasbinRoles , err := impl .CheckUserRoles (userInfo .Id )
673674
674675 if err != nil {
675- return nil , false , nil , err
676+ return nil , false , false , nil , err
676677 }
677678 for _ , oldItem := range userCasbinRoles {
678679 oldGroupMap [oldItem ] = oldItem
@@ -681,28 +682,35 @@ func (impl UserServiceImpl) UpdateUser(userInfo *bean.UserInfo, token string, ma
681682 for _ , item := range userInfo .Groups {
682683 userGroup , err := impl .roleGroupRepository .GetRoleGroupByName (item )
683684 if err != nil {
684- return nil , false , nil , err
685+ return nil , false , false , nil , err
685686 }
686687 newGroupMap [userGroup .CasbinName ] = userGroup .CasbinName
687688 if _ , ok := oldGroupMap [userGroup .CasbinName ]; ! ok {
688689 //check permission for new group which is going to add
689690 hasAccessToGroup := impl .checkGroupAuth (userGroup .CasbinName , token , managerAuth , isActionPerformingUserSuperAdmin )
690691 if hasAccessToGroup {
692+ groupsModified = true
691693 addedPolicies = append (addedPolicies , casbin2.Policy {Type : "g" , Sub : casbin2 .Subject (userInfo .EmailId ), Obj : casbin2 .Object (userGroup .CasbinName )})
692694 } else {
693- restrictedGroups = append (restrictedGroups , item )
695+ trimmedGroup := strings .TrimPrefix (item , "group:" )
696+ restrictedGroups = append (restrictedGroups , trimmedGroup )
694697 }
695698 }
696699 }
700+
697701 for _ , item := range userCasbinRoles {
698702 if _ , ok := newGroupMap [item ]; ! ok {
699703 if item != bean .SUPERADMIN {
700704 //check permission for group which is going to eliminate
701705 hasAccessToGroup := impl .checkGroupAuth (item , token , managerAuth , isActionPerformingUserSuperAdmin )
702706 if hasAccessToGroup {
707+ if strings .HasPrefix (item , "group:" ) {
708+ groupsModified = true
709+ }
703710 eliminatedPolicies = append (eliminatedPolicies , casbin2.Policy {Type : "g" , Sub : casbin2 .Subject (userInfo .EmailId ), Obj : casbin2 .Object (item )})
704711 } else {
705- restrictedGroups = append (restrictedGroups , item )
712+ trimmedGroup := strings .TrimPrefix (item , "group:" )
713+ restrictedGroups = append (restrictedGroups , trimmedGroup )
706714 }
707715 }
708716 }
@@ -712,18 +720,18 @@ func (impl UserServiceImpl) UpdateUser(userInfo *bean.UserInfo, token string, ma
712720 } else if userInfo .SuperAdmin == true {
713721 flag , err := impl .userAuthRepository .CreateRoleForSuperAdminIfNotExists (tx )
714722 if err != nil || flag == false {
715- return nil , false , nil , err
723+ return nil , false , false , nil , err
716724 }
717725 roleModel , err := impl .userAuthRepository .GetRoleByFilter ("" , "" , "" , "" , "super-admin" , "" )
718726 if err != nil {
719727 impl .logger .Errorw ("Error in fetching role by filter" , "user" , userInfo )
720- return nil , false , nil , err
728+ return nil , false , false , nil , err
721729 }
722730 if roleModel .Id > 0 {
723731 userRoleModel := & repository2.UserRoleModel {UserId : model .Id , RoleId : roleModel .Id }
724732 userRoleModel , err = impl .userAuthRepository .CreateUserRoleMapping (userRoleModel , tx )
725733 if err != nil {
726- return nil , false , nil , err
734+ return nil , false , false , nil , err
727735 }
728736 addedPolicies = append (addedPolicies , casbin2.Policy {Type : "g" , Sub : casbin2 .Subject (model .EmailId ), Obj : casbin2 .Object (roleModel .Role )})
729737 }
@@ -747,14 +755,14 @@ func (impl UserServiceImpl) UpdateUser(userInfo *bean.UserInfo, token string, ma
747755 model , err = impl .userRepository .UpdateUser (model , tx )
748756 if err != nil {
749757 impl .logger .Errorw ("error while fetching user from db" , "error" , err )
750- return nil , false , nil , err
758+ return nil , false , false , nil , err
751759 }
752760 err = tx .Commit ()
753761 if err != nil {
754- return nil , false , nil , err
762+ return nil , false , false , nil , err
755763 }
756764
757- return userInfo , rolesChanged , restrictedGroups , nil
765+ return userInfo , rolesChanged , groupsModified , restrictedGroups , nil
758766}
759767
760768func (impl UserServiceImpl ) GetById (id int32 ) (* bean.UserInfo , error ) {
0 commit comments