1
我正試圖學習在Scala的Play框架中使用Action組合。[Play] [Scala]我可以獲取多個鏈接的動作的內容嗎?
我知道做基本動作組合和WrappedRequests的能力,但是我的問題是:是否可以在組合動作中訪問多個WrappedRequest的內容?
讓我解釋一下,我有以下代碼:
class RequestWithUser[A](val user: models.User, request: Request[A]) extends WrappedRequest[A](request)
def UserAction(userId: Long) = new ActionBuilder[RequestWithUser] {
def invokeBlock[A](request: Request[A], block: (RequestWithUser[A]) => Future[SimpleResult]) = {
models.UsersDAO.findById(userId).map { user =>
block(new RequestWithUser(user, request))
} getOrElse {
Future.successful(NotFound)
}
}
}
case class AuthenticatedRequest[A](user: models.User, request: Request[A]) extends WrappedRequest[A](request)
object Authorized extends ActionBuilder[AuthenticatedRequest] {
def invokeBlock[A](request: Request[A], block: (AuthenticatedRequest[A]) => Future[SimpleResult]) = {
userTokenForm.bindFromRequest()(request).fold(
formWithErrors => {
resolve(Results.Unauthorized(formWithErrors.errorsAsJson))
},
userData => {
models.UsersDAO.findByToken(userData.token) map { user=>
block(AuthenticatedRequest(user, request))
} getOrElse {
resolve(Results.Unauthorized("Token matched no one."))
}
}
)
}
}
我希望能夠將它們組合成第三個動作可能叫用來構成授權和UserAction「UserPermissionAction」。 它應檢查授權用戶是否與RequestWithUser中的用戶相同(即僅允許用戶編輯自己)。
這可能嗎?