Skip to content

Commit 59f89d6

Browse files
authored
fix:rbac is not in sync with Actual application status (#4237)
* query modified in GetRolesForApp * query modified in GetRolesForApp and superAdmin issue fixed * userRole mapping deletion * laoding casbin * constant changed
1 parent 00d8638 commit 59f89d6

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

pkg/user/UserAuthService.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,20 +497,33 @@ func (impl UserAuthServiceImpl) DeleteRoles(entityType string, entityName string
497497

498498
// deleting policies in casbin and roles
499499
var casbinDeleteFailed []bool
500+
casbin2.LoadPolicy()
500501
for _, roleModel := range roleModels {
501502
success := casbin2.RemovePoliciesByRoles(roleModel.Role)
502503
if !success {
503504
impl.logger.Warnw("error in deleting casbin policy for role", "role", roleModel.Role)
504505
casbinDeleteFailed = append(casbinDeleteFailed, success)
505506
}
507+
allUsersMappedToRoles, err := casbin2.GetUserByRole(roleModel.Role)
508+
if err != nil {
509+
impl.logger.Errorw("error in getting all users by roles", "err", err, "role", roleModel.Role)
510+
return err
511+
}
512+
for _, rl := range allUsersMappedToRoles {
513+
success = casbin2.DeleteRoleForUser(rl, roleModel.Role)
514+
if !success {
515+
impl.logger.Warnw("error in deleting casbin policy for role", "role", roleModel.Role)
516+
casbinDeleteFailed = append(casbinDeleteFailed, success)
517+
}
518+
}
506519
//deleting user_roles for this role_id (foreign key constraint)
507520
err = impl.userAuthRepository.DeleteUserRoleByRoleId(roleModel.Id, tx)
508521
if err != nil {
509522
impl.logger.Errorw("error in deleting user_roles by role id", "err", err, "roleId", roleModel.Id)
510523
return err
511524
}
512525
//deleting role_group_role_mapping for this role_id (foreign key constraint)
513-
err := impl.roleGroupRepository.DeleteRoleGroupRoleMappingByRoleId(roleModel.Id, tx)
526+
err = impl.roleGroupRepository.DeleteRoleGroupRoleMappingByRoleId(roleModel.Id, tx)
514527
if err != nil {
515528
impl.logger.Errorw("error in deleting role_group_role_mapping by role id", "err", err, "roleId", roleModel.Id)
516529
return err
@@ -522,5 +535,6 @@ func (impl UserAuthServiceImpl) DeleteRoles(entityType string, entityName string
522535
return err
523536
}
524537
}
538+
casbin2.LoadPolicy()
525539
return nil
526540
}

pkg/user/repository/UserAuthRepository.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -951,8 +951,10 @@ func (impl UserAuthRepositoryImpl) GetRolesForProject(teamName string) ([]*RoleM
951951

952952
func (impl UserAuthRepositoryImpl) GetRolesForApp(appName string) ([]*RoleModel, error) {
953953
var roles []*RoleModel
954-
err := impl.dbConnection.Model(&roles).Where("entity is NULL").
955-
Where("entity_name = ?", appName).Select()
954+
err := impl.dbConnection.Model(&roles).
955+
Where("(entity is NULL) OR (entity = ? AND access_type = ?) OR (entity = ?)", bean2.ENTITY_APPS, bean2.DEVTRON_APP, bean2.EntityJobs).
956+
Where("entity_name = ?", appName).
957+
Select()
956958
if err != nil {
957959
impl.Logger.Errorw("error in getting roles for app", "err", err, "appName", appName)
958960
return nil, err

0 commit comments

Comments
 (0)