Skip to content

Commit c8d3c61

Browse files
fix: user/role group sql lock fix (#3206)
* change1 * "RBAC Refactoring and Policy Creation Optimisation" * "Removing ClusterType" * "ReFactoring the changes" * removed redundant method * "Changes After Reviews" * "Changes After Reviews 2" * "Changes After Reviews 3" * "Changes After Reviews 4" * "Changes After Reviews 5" * "Changes After Reviews 6" * "Changes After Reviews 6" * "Changes based on entity" * Code Cleaning * Code change 8 * Code change 9 * Code change 9 * Code change 10 * Code change 11 * Code change 12 * Code change 13 * fixed transaction error for creating roles * refactoring - 1 * refactoring * Changes after Resolving conflicts * Changes after Resolving conflicts 2 * Changes after Resolving conflicts 3 * Changes after Resolving access_type to accessType and queries * Final changes * Rbac-Optimimisation Change * Rbac-Optimimisation Final Change * refactoring * Fixing Legacy Bug * Fixing Visiblity issues all pods * Merge with main * Intialisation with capacity and adding logs * Intialisation with capacity and adding logs * Refactoring the changes * Adding logs * Adding logs 1 * Updating the audit logs for create Role * Handling from code instead of script * Merge Main * Deleting Commented Code and adding role group view * Fixing issues caught in Dev-Testing * Removing script queries * Fixing Issues of entity empty * Dev-Testing Changes * Final Changes * Reducing duplication * Reducing duplication * Adding audit logs for superAdmin for user role mappings * Visibility of permissions * Visibility of permissions for devtron-apps * Fixing Legacy issue for deleting roleGroup permissions * deleting group and role mapping from casbin * fix deadlock condition for user/role group update * updated sql script no. --------- Co-authored-by: shivam-nagar23 <[email protected]>
1 parent 24bb0e0 commit c8d3c61

File tree

4 files changed

+19
-184
lines changed

4 files changed

+19
-184
lines changed

pkg/user/RoleGroupService.go

Lines changed: 3 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ func (impl RoleGroupServiceImpl) CreateRoleGroup(request *bean.RoleGroup) (*bean
124124
}
125125
} else {
126126
actionType := roleFilter.Action
127-
128127
accessType := roleFilter.AccessType
129128
entityNames := strings.Split(roleFilter.EntityName, ",")
130129
environments := strings.Split(roleFilter.Environment, ",")
@@ -137,13 +136,7 @@ func (impl RoleGroupServiceImpl) CreateRoleGroup(request *bean.RoleGroup) (*bean
137136
impl.logger.Errorw("error in getting new role model")
138137
return nil, err
139138
}
140-
oldRoleModel, err := impl.userAuthRepository.GetRoleByFilterForAllTypes(entity, roleFilter.Team, entityName, environment, actionType, accessType, "", "", "", "", "", "", true)
141-
if err != nil {
142-
impl.logger.Errorw("error in getting old role model already present", "err", err)
143-
return nil, err
144-
}
145-
146-
if oldRoleModel.Id == 0 && roleModel.Id == 0 {
139+
if roleModel.Id == 0 {
147140
if roleFilter.Entity == bean2.ENTITY_APPS || roleFilter.Entity == bean.CHART_GROUP_ENTITY {
148141
flag, err, policiesAdded := impl.userAuthRepository.CreateDefaultPoliciesForAllTypes(roleFilter.Team, entityName, environment, entity, "", "", "", "", "", actionType, accessType, request.UserId)
149142
if err != nil || flag == false {
@@ -161,33 +154,7 @@ func (impl RoleGroupServiceImpl) CreateRoleGroup(request *bean.RoleGroup) (*bean
161154
} else {
162155
continue
163156
}
164-
} else if oldRoleModel.Id > 0 && roleModel.Id == 0 {
165-
flag, err := impl.userAuthRepository.CreateRolesWithAccessTypeAndEntity(roleFilter.Team, entityName, environment, entity, "", "", "", "", "", actionType, accessType, request.UserId, oldRoleModel.Role)
166-
if err != nil || flag == false {
167-
return nil, err
168-
}
169-
impl.logger.Infow("Getting Role by filter Again for other Types ")
170-
roleModel, err = impl.userAuthRepository.GetRoleByFilterForAllTypes(entity, roleFilter.Team, entityName, environment, actionType, accessType, "", "", "", "", "", "", false)
171-
if err != nil {
172-
return nil, err
173-
}
174-
if roleModel.Id == 0 {
175-
continue
176-
}
177-
// shift user_role_mapping queries
178-
userRole, err := impl.userRepository.UpdateRoleIdForUserRolesMappings(oldRoleModel.Id, roleModel.Id)
179-
if err != nil {
180-
impl.logger.Errorw("Error in updating role id from old roles with new role(access_type and entity)", "err", err)
181-
}
182-
183-
roleGroupRole, err := impl.roleGroupRepository.UpdateRoleGroupIdForRoleGroupMappings(oldRoleModel.Id, roleModel.Id)
184-
if err != nil {
185-
impl.logger.Errorw("Error in updating Role Group Role Mappings for old role with new roles (access_type and entity)", "err", err)
186-
}
187-
impl.logger.Infow("updated user role and roleGroups with new values", "userrole", userRole, "grouprole", roleGroupRole)
188-
189157
}
190-
191158
if roleModel.Id > 0 {
192159
roleGroupMappingModel := &repository2.RoleGroupRoleMapping{RoleGroupId: model.Id, RoleId: roleModel.Id}
193160
roleGroupMappingModel.CreatedBy = request.UserId
@@ -249,12 +216,7 @@ func (impl RoleGroupServiceImpl) CreateOrUpdateRoleGroupForClusterEntity(roleFil
249216
impl.logger.Errorw("error in getting new role model by filter")
250217
return policiesToBeAdded, err
251218
}
252-
oldRoleModel, err := impl.userAuthRepository.GetRoleByFilterForAllTypes(entity, "", "", "", "", accessType, roleFilter.Cluster, namespace, group, kind, resource, actionType, true)
253-
if err != nil {
254-
impl.logger.Errorw("error in getting old role model by filter already present")
255-
return policiesToBeAdded, err
256-
}
257-
if roleModel.Id == 0 && oldRoleModel.Id == 0 {
219+
if roleModel.Id == 0 {
258220
flag, err, policiesAdded := impl.userAuthRepository.CreateDefaultPoliciesForAllTypes("", "", "", entity, roleFilter.Cluster, namespace, group, kind, resource, actionType, accessType, userId)
259221
if err != nil || flag == false {
260222
return policiesToBeAdded, err
@@ -267,31 +229,6 @@ func (impl RoleGroupServiceImpl) CreateOrUpdateRoleGroupForClusterEntity(roleFil
267229
if roleModel.Id == 0 {
268230
continue
269231
}
270-
} else if oldRoleModel.Id > 0 && roleModel.Id == 0 {
271-
flag, err := impl.userAuthRepository.CreateRolesWithAccessTypeAndEntity("", "", "", roleFilter.Entity, roleFilter.Cluster, namespace, group, kind, resource, actionType, accessType, userId, oldRoleModel.Role)
272-
if err != nil || flag == false {
273-
return policiesToBeAdded, err
274-
}
275-
impl.logger.Infow("Getting Role by filter Again for other Types ")
276-
roleModel, err = impl.userAuthRepository.GetRoleByFilterForAllTypes(entity, "", "", "", "", accessType, roleFilter.Cluster, namespace, group, kind, resource, actionType, false)
277-
if err != nil {
278-
return policiesToBeAdded, err
279-
}
280-
if roleModel.Id == 0 {
281-
continue
282-
}
283-
// shift user_role_mapping queries
284-
userRole, err := impl.userRepository.UpdateRoleIdForUserRolesMappings(oldRoleModel.Id, roleModel.Id)
285-
if err != nil {
286-
impl.logger.Errorw("Error in updating User Role Mappings for role", "err", err)
287-
}
288-
289-
roleGroupRole, err := impl.roleGroupRepository.UpdateRoleGroupIdForRoleGroupMappings(oldRoleModel.Id, roleModel.Id)
290-
if err != nil {
291-
impl.logger.Errorw("Error in updating Role Group Role Mappings for role", "err", err)
292-
}
293-
impl.logger.Infow("updated user role and roleGroups", "userrole", userRole, "grouprole", roleGroupRole)
294-
295232
}
296233
if _, ok := existingRoles[roleModel.Id]; ok {
297234
//Adding policies which are removed
@@ -373,7 +310,6 @@ func (impl RoleGroupServiceImpl) UpdateRoleGroup(request *bean.RoleGroup, token
373310
// DELETE PROCESS ENDS
374311

375312
//Adding New Policies
376-
//var policies []casbin2.Policy
377313
capacity, mapping := impl.userCommonService.GetCapacityForRoleFilter(request.RoleFilters)
378314
var policies = make([]casbin2.Policy, 0, capacity)
379315
for index, roleFilter := range request.RoleFilters {
@@ -407,14 +343,8 @@ func (impl RoleGroupServiceImpl) UpdateRoleGroup(request *bean.RoleGroup, token
407343
if err != nil {
408344
return nil, err
409345
}
410-
oldRoleModel, err := impl.userAuthRepository.GetRoleByFilterForAllTypes(entity, roleFilter.Team, entityName, environment, actionType, accessType, "", "", "", "", "", "", true)
411-
if err != nil {
412-
return nil, err
413-
}
414-
if oldRoleModel.Id == 0 && roleModel.Id == 0 {
415-
346+
if roleModel.Id == 0 {
416347
request.Status = bean2.RoleNotFoundStatusPrefix + roleFilter.Team + "," + environment + "," + entityName + "," + actionType
417-
418348
if roleFilter.Entity == bean2.ENTITY_APPS || roleFilter.Entity == bean.CHART_GROUP_ENTITY {
419349
flag, err, policiesAdded := impl.userAuthRepository.CreateDefaultPoliciesForAllTypes(roleFilter.Team, entityName, environment, entity, "", "", "", "", "", actionType, accessType, request.UserId)
420350
policies = append(policies, policiesAdded...)
@@ -432,34 +362,7 @@ func (impl RoleGroupServiceImpl) UpdateRoleGroup(request *bean.RoleGroup, token
432362
} else {
433363
continue
434364
}
435-
} else if oldRoleModel.Id > 0 && roleModel.Id == 0 {
436-
437-
flag, err := impl.userAuthRepository.CreateRolesWithAccessTypeAndEntity(roleFilter.Team, entityName, environment, entity, "", "", "", "", "", actionType, accessType, request.UserId, oldRoleModel.Role)
438-
if err != nil || flag == false {
439-
return nil, err
440-
}
441-
impl.logger.Infow("Getting Role by filter Again for other Types ", "roleFilter", roleFilter)
442-
roleModel, err = impl.userAuthRepository.GetRoleByFilterForAllTypes(entity, roleFilter.Team, entityName, environment, actionType, accessType, "", "", "", "", "", "", false)
443-
if err != nil {
444-
return nil, err
445-
}
446-
if roleModel.Id == 0 {
447-
continue
448-
}
449-
// shift user_role_mapping queries
450-
userRole, err := impl.userRepository.UpdateRoleIdForUserRolesMappings(oldRoleModel.Id, roleModel.Id)
451-
if err != nil {
452-
impl.logger.Errorw("Error in updating User Role Mappings for role", "err", err)
453-
}
454-
455-
roleGroupRole, err := impl.roleGroupRepository.UpdateRoleGroupIdForRoleGroupMappings(oldRoleModel.Id, roleModel.Id)
456-
if err != nil {
457-
impl.logger.Errorw("Error in updating Role Group Role Mappings for role", "err", err)
458-
}
459-
impl.logger.Infow("updated user role and roleGroups", "userrole", userRole, "grouprole", roleGroupRole)
460-
461365
}
462-
463366
if _, ok := existingRoles[roleModel.Id]; ok {
464367
//Adding policies which is removed
465368
policies = append(policies, casbin2.Policy{Type: "g", Sub: casbin2.Subject(roleGroup.CasbinName), Obj: casbin2.Object(roleModel.Role)})

pkg/user/UserCommonService.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ func (impl UserCommonServiceImpl) RemoveRolesAndReturnEliminatedPolicies(userInf
109109
delete(eliminatedRoleIds, roleModel.Id)
110110
}
111111
if _, ok := existingRoleIds[oldRoleModel.Id]; ok {
112-
delete(eliminatedRoleIds, roleModel.Id)
112+
//delete old role mapping from existing but not from eliminated roles (so that it gets deleted)
113+
delete(existingRoleIds, oldRoleModel.Id)
113114
}
114115
}
115116
}
@@ -160,7 +161,8 @@ func (impl UserCommonServiceImpl) RemoveRolesAndReturnEliminatedPolicies(userInf
160161
delete(eliminatedRoleIds, roleModel.Id)
161162
}
162163
if _, ok := existingRoleIds[oldRoleModel.Id]; ok {
163-
delete(eliminatedRoleIds, roleModel.Id)
164+
//delete old role mapping from existing but not from eliminated roles (so that it gets deleted)
165+
delete(existingRoleIds, oldRoleModel.Id)
164166
}
165167

166168
}
@@ -262,7 +264,8 @@ func (impl UserCommonServiceImpl) RemoveRolesAndReturnEliminatedPoliciesForGroup
262264
delete(eliminatedRoles, roleModel.Id)
263265
}
264266
if _, ok := existingRoles[oldRoleModel.Id]; ok {
265-
delete(eliminatedRoles, roleModel.Id)
267+
//delete old role mapping from existing but not from eliminated roles (so that it gets deleted)
268+
delete(existingRoles, oldRoleModel.Id)
266269
}
267270
}
268271
}
@@ -310,12 +313,12 @@ func (impl UserCommonServiceImpl) RemoveRolesAndReturnEliminatedPoliciesForGroup
310313
request.Status = "role not fount for any given filter: " + roleFilter.Team + "," + environment + "," + entityName + "," + actionType
311314
continue
312315
}
313-
//roleModel := roleModels[0]
314316
if _, ok := existingRoles[roleModel.Id]; ok {
315317
delete(eliminatedRoles, roleModel.Id)
316318
}
317-
if _, ok := existingRoles[roleModel.Id]; ok {
318-
delete(eliminatedRoles, roleModel.Id)
319+
if _, ok := existingRoles[oldRoleModel.Id]; ok {
320+
//delete old role mapping from existing but not from eliminated roles (so that it gets deleted)
321+
delete(existingRoles, oldRoleModel.Id)
319322
}
320323

321324
}

pkg/user/UserService.go

Lines changed: 4 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -412,8 +412,6 @@ func (impl UserServiceImpl) CreateOrUpdateUserRolesForAllTypes(roleFilter bean.R
412412
rolesChanged := false
413413
roleFilter = impl.userCommonService.ReplacePlaceHolderForEmptyEntriesInRoleFilter(roleFilter)
414414
if entity == bean2.CLUSTER {
415-
impl.logger.Infow("Creating Or updating User for Cluster Entity ", roleFilter.Cluster)
416-
417415
policiesToBeAdded, rolesChanged, err = impl.createOrUpdateUserRolesForClusterEntity(roleFilter, userId, model, existingRoles, token, managerAuth, tx, entity, capacity)
418416
if err != nil {
419417
return nil, false, err
@@ -425,9 +423,6 @@ func (impl UserServiceImpl) CreateOrUpdateUserRolesForAllTypes(roleFilter bean.R
425423
environments := strings.Split(roleFilter.Environment, ",")
426424
for _, environment := range environments {
427425
for _, entityName := range entityNames {
428-
429-
impl.logger.Infow("Creating Or updating User Roles for other types ", "environment", environment, "entityName", entityName)
430-
431426
if managerAuth != nil {
432427
// check auth only for apps permission, skip for chart group
433428
rbacObject := fmt.Sprintf("%s", strings.ToLower(roleFilter.Team))
@@ -438,24 +433,17 @@ func (impl UserServiceImpl) CreateOrUpdateUserRolesForAllTypes(roleFilter bean.R
438433
}
439434
entityName = impl.userCommonService.RemovePlaceHolderInRoleFilterField(entityName)
440435
environment = impl.userCommonService.RemovePlaceHolderInRoleFilterField(environment)
441-
impl.logger.Infow("Getting Roles for other types ")
442-
443436
roleModel, err := impl.userAuthRepository.GetRoleByFilterForAllTypes(entity, roleFilter.Team, entityName, environment, actionType, accessType, "", "", "", "", "", actionType, false)
444437
if err != nil {
438+
impl.logger.Errorw("error in getting role by all type", "err", err, "roleFilter", roleFilter)
445439
return policiesToBeAdded, rolesChanged, err
446440
}
447-
oldRoleModel, err := impl.userAuthRepository.GetRoleByFilterForAllTypes(entity, roleFilter.Team, entityName, environment, actionType, accessType, "", "", "", "", "", actionType, true)
448-
if err != nil {
449-
return policiesToBeAdded, rolesChanged, err
450-
}
451-
if oldRoleModel.Id == 0 && roleModel.Id == 0 {
441+
if roleModel.Id == 0 {
452442
impl.logger.Debugw("no role found for given filter", "filter", "roleFilter", roleFilter)
453443
flag, err, policiesAdded := impl.userAuthRepository.CreateDefaultPoliciesForAllTypes(roleFilter.Team, entityName, environment, entity, "", "", "", "", "", actionType, accessType, userId)
454444
if err != nil || flag == false {
455445
return policiesToBeAdded, rolesChanged, err
456446
}
457-
impl.logger.Infow("Getting Role by filter Again for other Types ")
458-
459447
policiesToBeAdded = append(policiesToBeAdded, policiesAdded...)
460448
roleModel, err = impl.userAuthRepository.GetRoleByFilterForAllTypes(entity, roleFilter.Team, entityName, environment, actionType, accessType, "", "", "", "", "", actionType, false)
461449
if err != nil {
@@ -464,37 +452,9 @@ func (impl UserServiceImpl) CreateOrUpdateUserRolesForAllTypes(roleFilter bean.R
464452
if roleModel.Id == 0 {
465453
continue
466454
}
467-
} else if oldRoleModel.Id > 0 && roleModel.Id == 0 {
468-
469-
flag, err := impl.userAuthRepository.CreateRolesWithAccessTypeAndEntity(roleFilter.Team, entityName, environment, entity, "", "", "", "", "", actionType, accessType, userId, oldRoleModel.Role)
470-
if err != nil || flag == false {
471-
return policiesToBeAdded, rolesChanged, err
472-
}
473-
impl.logger.Infow("Getting Role by filter Again for other Types ")
474-
roleModel, err = impl.userAuthRepository.GetRoleByFilterForAllTypes(entity, roleFilter.Team, entityName, environment, actionType, accessType, "", "", "", "", "", actionType, false)
475-
if err != nil {
476-
return policiesToBeAdded, rolesChanged, err
477-
}
478-
if roleModel.Id == 0 {
479-
continue
480-
}
481-
// shift user_role_mapping queries
482-
userRole, err := impl.userRepository.UpdateRoleIdForUserRolesMappings(oldRoleModel.Id, roleModel.Id)
483-
if err != nil {
484-
impl.logger.Errorw("Error in updating User Role Mappings for role", "err", err)
485-
}
486-
487-
roleGroupRole, err := impl.roleGroupRepository.UpdateRoleGroupIdForRoleGroupMappings(oldRoleModel.Id, roleModel.Id)
488-
if err != nil {
489-
impl.logger.Errorw("Error in updating Role Group Role Mappings for role", "err", err)
490-
}
491-
impl.logger.Infow("updated user role and roleGroups", "userrole", userRole, "grouprole", roleGroupRole)
492-
493455
}
494456
if _, ok := existingRoles[roleModel.Id]; ok {
495457
//Adding policies which is removed
496-
impl.logger.Infow("Adding policies which is removed")
497-
498458
policiesToBeAdded = append(policiesToBeAdded, casbin2.Policy{Type: "g", Sub: casbin2.Subject(model.EmailId), Obj: casbin2.Object(roleModel.Role)})
499459
} else if roleModel.Id > 0 {
500460
rolesChanged = true
@@ -507,12 +467,10 @@ func (impl UserServiceImpl) CreateOrUpdateUserRolesForAllTypes(roleFilter bean.R
507467
UpdatedBy: userId,
508468
UpdatedOn: time.Now(),
509469
}}
510-
impl.logger.Infow("Creating User Role Mapping for other types")
511470
userRoleModel, err = impl.userAuthRepository.CreateUserRoleMapping(userRoleModel, tx)
512471
if err != nil {
513472
return nil, rolesChanged, err
514473
}
515-
impl.logger.Infow("User Policy addition in var")
516474
policiesToBeAdded = append(policiesToBeAdded, casbin2.Policy{Type: "g", Sub: casbin2.Subject(model.EmailId), Obj: casbin2.Object(roleModel.Role)})
517475
}
518476
}
@@ -553,11 +511,7 @@ func (impl UserServiceImpl) createOrUpdateUserRolesForClusterEntity(roleFilter b
553511
if err != nil {
554512
return policiesToBeAdded, rolesChanged, err
555513
}
556-
oldRoleModel, err := impl.userAuthRepository.GetRoleByFilterForAllTypes(entity, "", "", "", "", accessType, roleFilter.Cluster, namespace, group, kind, resource, actionType, true)
557-
if err != nil {
558-
return policiesToBeAdded, rolesChanged, err
559-
}
560-
if roleModel.Id == 0 && oldRoleModel.Id == 0 {
514+
if roleModel.Id == 0 {
561515
impl.logger.Infow("Creating Polices for cluster", resource, kind, namespace, group)
562516
flag, err, policiesAdded := impl.userAuthRepository.CreateDefaultPoliciesForAllTypes("", "", "", entity, roleFilter.Cluster, namespace, group, kind, resource, actionType, accessType, userId)
563517
if err != nil || flag == false {
@@ -572,33 +526,7 @@ func (impl UserServiceImpl) createOrUpdateUserRolesForClusterEntity(roleFilter b
572526
if roleModel.Id == 0 {
573527
continue
574528
}
575-
} else if oldRoleModel.Id > 0 && roleModel.Id == 0 {
576-
flag, err := impl.userAuthRepository.CreateRolesWithAccessTypeAndEntity("", "", "", roleFilter.Entity, roleFilter.Cluster, namespace, group, kind, resource, actionType, accessType, userId, oldRoleModel.Role)
577-
if err != nil || flag == false {
578-
return policiesToBeAdded, rolesChanged, err
579-
}
580-
impl.logger.Infow("Getting Role by filter Again for other Types ")
581-
roleModel, err = impl.userAuthRepository.GetRoleByFilterForAllTypes(entity, "", "", "", "", accessType, roleFilter.Cluster, namespace, group, kind, resource, actionType, false)
582-
if err != nil {
583-
return policiesToBeAdded, rolesChanged, err
584-
}
585-
if roleModel.Id == 0 {
586-
continue
587-
}
588-
// shift user_role_mapping queries
589-
userRole, err := impl.userRepository.UpdateRoleIdForUserRolesMappings(oldRoleModel.Id, roleModel.Id)
590-
if err != nil {
591-
impl.logger.Errorw("Error in updating User Role Mappings for role", "err", err)
592-
}
593-
594-
roleGroupRole, err := impl.roleGroupRepository.UpdateRoleGroupIdForRoleGroupMappings(oldRoleModel.Id, roleModel.Id)
595-
if err != nil {
596-
impl.logger.Errorw("Error in updating Role Group Role Mappings for role", "err", err)
597-
}
598-
impl.logger.Infow("updated user role and roleGroups", "userrole", userRole, "grouprole", roleGroupRole)
599-
600529
}
601-
602530
if _, ok := existingRoles[roleModel.Id]; ok {
603531
//Adding policies which are removed
604532
policiesToBeAdded = append(policiesToBeAdded, casbin2.Policy{Type: "g", Sub: casbin2.Subject(model.EmailId), Obj: casbin2.Object(roleModel.Role)})
@@ -618,7 +546,6 @@ func (impl UserServiceImpl) createOrUpdateUserRolesForClusterEntity(roleFilter b
618546
if err != nil {
619547
return nil, rolesChanged, err
620548
}
621-
impl.logger.Infow("Adding policies g type to var")
622549
policiesToBeAdded = append(policiesToBeAdded, casbin2.Policy{Type: "g", Sub: casbin2.Subject(model.EmailId), Obj: casbin2.Object(roleModel.Role)})
623550
}
624551
}
@@ -628,6 +555,7 @@ func (impl UserServiceImpl) createOrUpdateUserRolesForClusterEntity(roleFilter b
628555
}
629556
return policiesToBeAdded, rolesChanged, nil
630557
}
558+
631559
func (impl UserServiceImpl) mergeRoleFilter(oldR []bean.RoleFilter, newR []bean.RoleFilter) []bean.RoleFilter {
632560
var roleFilters []bean.RoleFilter
633561
keysMap := make(map[string]bool)

wire_gen.go

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)