Я использую вариант решения безопасности, реализованного в ZenTask в примере проекта:
Цель состоит в том, чтобы объединить withAuth
и Action(parse.json)
, но я не могу понять, как это сделать.
Моя черта безопасности
def withAuth(f: => Int => Request[AnyContent] => Result) = {
Security.Authenticated(userid, onUnauthorized) { userid =>
Action(request => f(userid.toInt)(request))
}
}
Я хочу использовать пьесы, встроенные в анализатор тела, как обычно:
def newReport() = Action(parse.json) { request =>
Вместо того, чтобы вручную анализировать тело в json в моем контроллере.
def newReport() = withAuth { userId =>
{ request =>
request.body.asJson match {
case Some(json) =>
json.validate[Report](Reports.readsWithoutUser).map {
case _: Report =>
Reports.newReport(_)
Ok("")
}.recoverTotal {
e =>
val errors = JsError.toFlatJson(e)
Logger.error(errors.toString)
BadRequest("Detected error:" + errors)
}
case None => BadRequest("Json object missing from request")
}
}