1

ここで私の問題:デッドボルトを使用してコントローラーでユーザー許可をチェックインし、(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] =>

すでにこれに対処した人はいますか?

4

2 に答える 2