ここで私の問題:デッドボルトを使用してコントローラーでユーザー許可をチェックインし、(ActionBuilder を使用して) 要求に何かを追加する必要があります。通常は Play Action Builder を使用します(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 _
orを記述することで、この変換を明示的に行うことができます。Pattern(_,_,_,_,_)(_)(_)
Pattern
[エラー] def createSomething: Action[AnyContent] = (deadbolt.Pattern("Create_Deck", PatternType.EQUALITY)() andThen itemAction).synchronized() { 暗黙のリクエスト: ItemRequest[AnyContent] =>
すでにこれに対処した人はいますか?