deniedResponses return List<DeniedResponse> instead of List<AccessResponse>

This commit is contained in:
2021-07-14 18:13:55 +02:00
parent 1fe063add2
commit 74b527de1d
2 changed files with 22 additions and 11 deletions

View File

@@ -62,8 +62,8 @@ fun AccessResponses.assert() {
throw AccessDeniedException(this) throw AccessDeniedException(this)
} }
} }
val AccessResponses.grantedResponses get(): AccessResponses = this.filterIsInstance<GrantedResponse>() val AccessResponses.grantedResponses get(): List<GrantedResponse> = this.filterIsInstance<GrantedResponse>()
val AccessResponses.deniedResponses get(): AccessResponses = this.filterIsInstance<DeniedResponse>() val AccessResponses.deniedResponses get(): List<DeniedResponse> = this.filterIsInstance<DeniedResponse>()
/** /**
* Convert responses as boolean * Convert responses as boolean
@@ -78,6 +78,9 @@ class AccessDeniedException(val accessResponses: AccessResponses) : Throwable(ac
*/ */
fun first(): AccessResponse = accessResponses.deniedResponses.first() fun first(): AccessResponse = accessResponses.deniedResponses.first()
val deniedResponses: List<DeniedResponse>
get() = this.accessResponses.deniedResponses
/** /**
* Check if the error code is present into the responses * Check if the error code is present into the responses
*/ */
@@ -97,12 +100,12 @@ class AccessDeniedException(val accessResponses: AccessResponses) : Throwable(ac
*/ */
fun getMessages(): List<String> = accessResponses fun getMessages(): List<String> = accessResponses
.deniedResponses .deniedResponses
.map { it.message!! } .map { it.message }
/** /**
* Get the first message * Get the first message
*/ */
fun getFirstMessage(): String? = accessResponses fun getFirstMessage(): String = accessResponses
.deniedResponses .deniedResponses
.first() .first()
.message .message
@@ -116,8 +119,8 @@ class AccessDeniedException(val accessResponses: AccessResponses) : Throwable(ac
sealed class AccessResponse( sealed class AccessResponse(
val decision: AccessDecision, val decision: AccessDecision,
val accessControl: AccessKontrol, val accessControl: AccessKontrol,
val message: String?, open val message: String?,
val code: String? open val code: String?
) { ) {
/** /**
* Convert response as boolean * Convert response as boolean
@@ -142,8 +145,8 @@ open class GrantedResponse(
open class DeniedResponse( open class DeniedResponse(
accessControl: AccessKontrol, accessControl: AccessKontrol,
message: String, override val message: String,
code: String override val code: String
) : AccessResponse(AccessDecision.DENIED, accessControl, message, code) ) : AccessResponse(AccessDecision.DENIED, accessControl, message, code)
class GrantedResponses( class GrantedResponses(
@@ -159,7 +162,7 @@ class DeniedResponses(
accessResponses: List<AccessResponse> accessResponses: List<AccessResponse>
) : AccessResponses by accessResponses, ) : AccessResponses by accessResponses,
DeniedResponse( DeniedResponse(
accessResponses.deniedResponses.first().accessControl, accessResponses.deniedResponses.firstOrNull()?.accessControl ?: error("DeniedResponses cannot be empty"),
accessResponses.deniedResponses.firstOrNull()?.message ?: error("DeniedResponses cannot be empty"), accessResponses.deniedResponses.first().message,
accessResponses.deniedResponses.firstOrNull()?.code ?: error("DeniedResponses cannot be empty") accessResponses.deniedResponses.first().code
) )

View File

@@ -98,6 +98,7 @@ class AccessKontrolTest {
assertEquals(null, getErrorCode("notExists")?.code) assertEquals(null, getErrorCode("notExists")?.code)
assertEquals("KO2", getMessages().last()) assertEquals("KO2", getMessages().last())
assertEquals("KO", getFirstMessage()) assertEquals("KO", getFirstMessage())
assertEquals("ko", deniedResponses.firstOrNull()?.code)
} }
} }
@@ -126,6 +127,13 @@ class AccessKontrolTest {
.run { .run {
assertFalse(decision.toBoolean()) assertFalse(decision.toBoolean())
} }
AccessControlSample()
.canView(listOf(MyObject("denied"), MyObject("granted")), User(""))
.getFirstDecisionResponse()
.run {
assertFalse(decision.toBoolean())
}
} }
@Test @Test