使用请求数据的剪影授权
Posted
技术标签:
【中文标题】使用请求数据的剪影授权【英文标题】:Silhouette authorization using request data 【发布时间】:2016-08-11 04:31:41 【问题描述】:我使用 Silhouette 和 Play 2.4,如果 SecuredRequest
正文包含错误,我想限制操作。
我知道,我应该使用 Authorization
所描述的特征 official docs。
我正在尝试执行以下操作:
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
如何在WithCheck
类中使用checkCriteria
值?
【问题讨论】:
【参考方案1】:我找到了解决办法。
不知何故,我看到isAuthorized
具有相同的request
作为隐式参数。因此,检查可以完全在isAuthorized
中完成。例如,
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)
【讨论】:
这样的问题是我们必须解析请求两次。Authorization
trait 似乎有点设计缺陷,因为类型参数 B
没用。以上是关于使用请求数据的剪影授权的主要内容,如果未能解决你的问题,请参考以下文章