私はPlayを使用しています! 2.4認可のためにDeadbolt2で。しかし、私は認可ルールを導入して以来、私は自分のコントローラーに成功したテストを書くことができません。例として:deadbolt2 DeadboltActionsを使ってコントローラをテストするにはどうしたらいいですか?
class VisitController @Inject() (authorization: DeadboltActions) extends Controller {
def fetchDailyVisits(date: Date) = authorization.Restrict(List(Array(ADMIN_ROLE), Array(MANAGER_ROLE))) {
Action.async {
visitService.findDailyVisits(date).map(result =>
Ok(Json.toJson(result))
)
}
}
}
私はテストでspecs2を使用しています。私のテストでは、このATMのようになります。
class VisitControllerSpec extends PlaySpecification with Mockito with ScalaFutures {
val deadboltActions = mock[DeadboltActions]
"VisitControllerSpec#fetchDailyVisits" should {
val testDate = Date.from(LocalDate.of(2016, 2, 25)
.atStartOfDay(ZoneId.systemDefault()).toInstant)
"Return Status Ok with returned list" in {
val expected = List(completeVisitWithId, anotherCompleteVisitWithId)
visitService.findDailyVisits(testDate) returns Future { expected }
val request = FakeRequest(GET, "/visits?date=2016-02-25")
val result = new VisitController(deadboltActions)
.fetchDailyVisits(testDate)(request)
result.futureValue.header.status must beEqualTo(OK)
contentAsJson(result) must_== Json.toJson(expected)
}
}
}
は、どのように私は、私がアクセスを許可するユーザーを指定することができるように、deadboltActionsを欺くのですか?
別の方法がありますか?多分、別のDeadboltHandlerを提供することによって?これは道のりがはっきりしているようですが、私はそれを理解することができないようであり、少なくともデカルト2の例はありません(少なくともスカラーの場合)。
さらに、極端な場合、スケーラビリでうまく機能し、コントローラーを汚染せずにセキュリティをクロスカッティングの懸念事項として扱うことができる他の承認フレームワークですか?この理由からDeadbolt2はあまりにも限られていますが、正直なところ、(自分で書かない限り)より良い認証フレームワークを見つけることはできません。
このアプローチは、あなたの答えに触発され、Panoptesを見て、2.5.1-SNAPSHOTとしてDeadboltで利用できるようになりました。 https://deadbolt-scala.readme.io/v2.5.1/docs/authorized-routes –
すごくいいですね。私のクライアントの締め切りは厳しいので、すでにPanoptesの作成作業を行っていましたが、今のところそれに固執しますが、Deadboltにはこれらの機能もあります。ちなみに、ドキュメントでは言及していませんが、特質を実装してカスタムの認可ルールを書くこともできます。 Cheers – redwulf
絶対に - あなたは単に 'FilterFunction'を実装することができます。私はあなたがパノプテスを書いたことを気づかなかった - 素敵な仕事! –