Scala 使用请求数据的轮廓授权

Scala 使用请求数据的轮廓授权,scala,playframework,silhouette,Scala,Playframework,Silhouette,我使用剪影和播放2.4,如果SecuredRequest主体包含错误内容,我希望限制操作 我知道,我应该使用trait授权,如所述 我正在努力做到以下几点: case class WithCheck(checkCriteria: String) extends Authorization[User, CookieAuthenticator] { def isAuthorized[B](user: User, authenticator: CookieAuthenticator)(implic

我使用剪影播放2.4,如果
SecuredRequest
主体包含错误内容,我希望限制操作

我知道,我应该使用trait
授权
,如所述

我正在努力做到以下几点:

case class WithCheck(checkCriteria: String) extends Authorization[User, CookieAuthenticator] {
  def isAuthorized[B](user: User, authenticator: CookieAuthenticator)(implicit request: Request[B], messages: Messages) = {

    Future.successful(user.criteria == checkCriteria)
  }
}

def myAction = SecuredAction(WithCheck("bar")) { implicit request =>
  val foo = ...// deserialize object from request.body
  val checkCriteria = foo.criteria 
  // do something else here
}
如何使用类
中的
检查标准
值来检查

我找到了一个解决方案

不知何故,我看不到
isAuthorized
具有与隐式参数相同的
request
。因此,检查可以完全进入授权的
中。比如说,

case class WithCheck() extends Authorization[User, CookieAuthenticator] {
  def isAuthorized[B](user: User, authenticator: CookieAuthenticator)(implicit request: Request[B], messages: Messages) = {
    val foo = upickle.read[Foo](request.body.toString())
    Future.successful(user.criteria == foo.criteria)
  }
}

问题是,这意味着我们必须对请求进行两次解析。这似乎是
授权
特性中的一个设计缺陷,因为类型参数
B
是无用的。