Scala 使用请求数据的轮廓授权
我使用剪影和播放2.4,如果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
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
是无用的。