From cf6d26196f257553dc5ea89415c13ce30f443b4f Mon Sep 17 00:00:00 2001 From: Gauthier Roebroeck Date: Thu, 3 Mar 2022 11:03:43 +0800 Subject: [PATCH] refactor: make KomgaUser.roles a lazy property --- .../org/gotson/komga/domain/model/KomgaUser.kt | 14 ++++++++------ .../komga/domain/service/KomgaUserLifecycle.kt | 2 +- .../infrastructure/security/KomgaPrincipal.kt | 2 +- .../komga/interfaces/api/rest/dto/UserDto.kt | 6 +++--- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/model/KomgaUser.kt b/komga/src/main/kotlin/org/gotson/komga/domain/model/KomgaUser.kt index be307357f..398124aac 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/model/KomgaUser.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/model/KomgaUser.kt @@ -29,12 +29,14 @@ data class KomgaUser( override val lastModifiedDate: LocalDateTime = createdDate, ) : Auditable, Serializable { - fun roles(): Set { - val roles = mutableSetOf(ROLE_USER) - if (roleAdmin) roles.add(ROLE_ADMIN) - if (roleFileDownload) roles.add(ROLE_FILE_DOWNLOAD) - if (rolePageStreaming) roles.add(ROLE_PAGE_STREAMING) - return roles + @delegate:Transient + val roles: Set by lazy { + buildSet { + add(ROLE_USER) + if (roleAdmin) add(ROLE_ADMIN) + if (roleFileDownload) add(ROLE_FILE_DOWNLOAD) + if (rolePageStreaming) add(ROLE_PAGE_STREAMING) + } } /** diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/KomgaUserLifecycle.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/KomgaUserLifecycle.kt index 3d84322cd..69e408d4e 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/KomgaUserLifecycle.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/KomgaUserLifecycle.kt @@ -45,7 +45,7 @@ class KomgaUserLifecycle( logger.info { "Update user: $toUpdate" } userRepository.update(toUpdate) - val expireSessions = existing.roles() != user.roles() || + val expireSessions = existing.roles != user.roles || existing.restrictions != user.restrictions || existing.sharedAllLibraries != user.sharedAllLibraries || existing.sharedLibrariesIds != user.sharedLibrariesIds diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/security/KomgaPrincipal.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/security/KomgaPrincipal.kt index 987b004f9..0599b2b0a 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/security/KomgaPrincipal.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/security/KomgaPrincipal.kt @@ -16,7 +16,7 @@ class KomgaPrincipal( ) : UserDetails, OAuth2User, OidcUser { override fun getAuthorities(): MutableCollection = - user.roles() + user.roles .map { SimpleGrantedAuthority("ROLE_$it") } .toMutableSet() diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/dto/UserDto.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/dto/UserDto.kt index 1d23fc315..318f052da 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/dto/UserDto.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/dto/UserDto.kt @@ -24,7 +24,7 @@ fun KomgaUser.toDto() = UserDto( id = id, email = email, - roles = roles().toList(), + roles = roles.toList(), ) @Deprecated("Deprecated since 0.153.0. Use toDtoV2() instead") @@ -52,7 +52,7 @@ fun KomgaUser.toDtoV2() = UserDtoV2( id = id, email = email, - roles = roles(), + roles = roles, sharedAllLibraries = sharedAllLibraries, sharedLibrariesIds = sharedLibrariesIds, labelsAllow = restrictions.labelsAllow, @@ -81,7 +81,7 @@ fun KomgaUser.toWithSharedLibrariesDto() = UserWithSharedLibrariesDto( id = id, email = email, - roles = roles().toList(), + roles = roles.toList(), sharedAllLibraries = sharedAllLibraries, sharedLibraries = sharedLibrariesIds.map { SharedLibraryDto(it) }, )