in controllers/user/chain/sync_user_permissions.go [25:60]
func (h SyncUserPermissions) ServeRequest(ctx context.Context, user *sonarApi.SonarUser) error {
log := ctrl.LoggerFrom(ctx).WithValues("userlogin", user.Spec.Login)
log.Info("Syncing user permissions in sonar")
existingPermissions, err := h.getExistingUserPermissions(ctx, user.Spec.Login)
if err != nil {
return err
}
currentPermissions := helper.SliceToMap(user.Spec.Permissions)
for p := range existingPermissions {
if _, ok := currentPermissions[p]; ok {
delete(currentPermissions, p)
continue
}
if err = h.sonarApiClient.RemovePermissionFromUser(ctx, user.Spec.Login, p); err != nil {
return fmt.Errorf("failed to remove usr permission: %w", err)
}
log.Info("User permission has been removed", "permission", p)
}
for g := range currentPermissions {
if err = h.sonarApiClient.AddPermissionToUser(ctx, user.Spec.Login, g); err != nil {
return fmt.Errorf("failed to add user permission: %w", err)
}
log.Info("User permission has been added", "permission", g)
}
log.Info("User permissions have been synced")
return nil
}