【发布时间】:2018-11-23 17:10:23
【问题描述】:
这是我的问题:
我需要使用 deadbolt 在控制器中检查用户权限,然后向请求中添加一些内容(使用 ActionBuilder)。通常使用 Play Action Builders 将是 (action1 andThen action2),但这不适用于 DeadboltActions。
这里有一些代码:
动作生成器
import javax.inject.Inject
import models.Item
import modules.item.services.ItemServiceClient
import play.api.mvc._
import scala.concurrent.{ExecutionContext, Future}
class ItemRequest[A](val items: Seq[Item], request: Request[A]) extends WrappedRequest[A](request)
class ItemAction @Inject()(val parser: BodyParsers.Default)(implicit val executionContext: ExecutionContext)
extends ActionBuilder[ItemRequest, AnyContent] with ActionTransformer[Request, ItemRequest] {
def transform[A](request: Request[A]): Future[ItemRequest[A]] = {
ItemServiceClient.getItems.map{
new ItemRequest(_, request)
}recover{
case _ => new ItemRequest(Seq(), request)
}
}
}
控制器:
@Singleton
class ItemController @Inject()(cc: ControllerComponents, deadbolt: DeadboltActions, itemAction: ItemAction) extends AbstractController(cc) with I18nSupport {
def createSomething: Action[AnyContent] = (deadbolt.Pattern("Create_Something", PatternType.EQUALITY) andThen itemAction) { implicit request: ItemRequest[AnyContent] =>
Ok(modules.item.views.html.createSomething(Something.form, request.items))
}
}
[错误] 只有在需要函数类型时,未应用的方法才会转换为函数。 您可以通过编写
Pattern _或Pattern(_,_,_,_,_)(_)(_)而不是Pattern来明确此转换。[error] def createSomething: Action[AnyContent] = (deadbolt.Pattern("Create_Deck", PatternType.EQUALITY)() andThen itemAction).synchronized() { 隐式请求:ItemRequest[AnyContent] =>
有人处理过这个问题吗?
【问题讨论】:
标签: scala playframework deadbolt-2