func()

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
}