Fix the problem of username being case-insensitive and logging in without permissions (#4552)

#### What type of PR is this?

/kind bug
/area core
/milestone 2.10.x

#### What this PR does / why we need it:

This PR fixes the problem of username being case-insensitive and logging in without permissions. Please note that the problem only occurs with MySQL.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/4549

#### Special notes for your reviewer:

```bash
docker run -it --rm --name halodb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=openmysql -e MYSQL_DATABASE=halo mysql:8

./gradlew bootRun --args="--spring.profiles.active=dev,mysql --halo.plugin.runtime-mode=deployment"
```

#### Does this PR introduce a user-facing change?

```release-note
修复因大小写问题导致登录后无权限的问题
```
pull/4551/head
John Niang 2023-09-07 13:52:11 +08:00 committed by GitHub
parent eea575c1e2
commit 9c3e603bda
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 3 additions and 2 deletions

View File

@ -41,13 +41,14 @@ public class DefaultUserDetailService
.onErrorMap(UserNotFoundException.class, .onErrorMap(UserNotFoundException.class,
e -> new BadCredentialsException("Invalid Credentials")) e -> new BadCredentialsException("Invalid Credentials"))
.flatMap(user -> { .flatMap(user -> {
var subject = new Subject(KIND, username, GROUP); var name = user.getMetadata().getName();
var subject = new Subject(KIND, name, GROUP);
return roleService.listRoleRefs(subject) return roleService.listRoleRefs(subject)
.filter(this::isRoleRef) .filter(this::isRoleRef)
.map(RoleRef::getName) .map(RoleRef::getName)
.collectList() .collectList()
.map(roleNames -> User.builder() .map(roleNames -> User.builder()
.username(username) .username(name)
.password(user.getSpec().getPassword()) .password(user.getSpec().getPassword())
.roles(roleNames.toArray(new String[0])) .roles(roleNames.toArray(new String[0]))
.build()); .build());