Deduplicate logic across controllers, auth, and schema fixes
All checks were successful
build-and-deploy / build-deploy (push) Successful in 33s
All checks were successful
build-and-deploy / build-deploy (push) Successful in 33s
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
package com.android.trisolarisserver.controller
|
||||
|
||||
import com.android.trisolarisserver.component.PropertyAccess
|
||||
import com.android.trisolarisserver.models.property.AppUser
|
||||
import com.android.trisolarisserver.models.property.Role
|
||||
import com.android.trisolarisserver.repo.AppUserRepo
|
||||
import com.android.trisolarisserver.security.MyPrincipal
|
||||
import org.springframework.http.HttpStatus
|
||||
import org.springframework.web.server.ResponseStatusException
|
||||
import java.util.UUID
|
||||
|
||||
internal fun requirePrincipal(principal: MyPrincipal?): MyPrincipal {
|
||||
return principal ?: throw ResponseStatusException(HttpStatus.UNAUTHORIZED, "Missing principal")
|
||||
}
|
||||
|
||||
internal fun requireUser(appUserRepo: AppUserRepo, principal: MyPrincipal?): AppUser {
|
||||
val resolved = requirePrincipal(principal)
|
||||
return appUserRepo.findById(resolved.userId).orElseThrow {
|
||||
ResponseStatusException(HttpStatus.UNAUTHORIZED, "User not found")
|
||||
}
|
||||
}
|
||||
|
||||
internal fun requireMember(
|
||||
propertyAccess: PropertyAccess,
|
||||
propertyId: UUID,
|
||||
principal: MyPrincipal?
|
||||
): MyPrincipal {
|
||||
val resolved = requirePrincipal(principal)
|
||||
propertyAccess.requireMember(propertyId, resolved.userId)
|
||||
return resolved
|
||||
}
|
||||
|
||||
internal fun requireRole(
|
||||
propertyAccess: PropertyAccess,
|
||||
propertyId: UUID,
|
||||
principal: MyPrincipal?,
|
||||
vararg roles: Role
|
||||
): MyPrincipal {
|
||||
val resolved = requireMember(propertyAccess, propertyId, principal)
|
||||
propertyAccess.requireAnyRole(propertyId, resolved.userId, *roles)
|
||||
return resolved
|
||||
}
|
||||
Reference in New Issue
Block a user