pmiklos
06/30/2019, 4:07 AMPipelineContext
that I can use inside HTTP methods:
sealed class Permission(val name: String)
sealed class Article(name: String): Permission(name) {
object Create: Article("articles.create")
object Delete: Article("articles.delete")
}
fun PipelineContext<Unit, ApplicationCall>.hasPermission(permission: Permission) {
val principal = call.authentication.principal<ApiClientPrincipal>()!!
if (!principal.permissions.contains(permission.name)) {
throw AuthorizationException()
}
}
and then
route("/articles") {
post("/") {
hasPermission(Article.Create)
...
}
}