Deadbolt는 개발자를 특정 스타일로 강제하지 않으므로이 경우 meta
인수를 사용하여 제약 조건에 정보를 전달할 수 있습니다. 정의는
object DynamicAction {
def apply(name: String, meta: Option[Any] = None): DynamicAction.DynamicActionBuilder = DynamicActionBuilder(name, meta)
case class DynamicActionBuilder(name: String, meta: Option[Any] = None) extends DeadboltActionBuilder {
override def apply[A](bodyParser: BodyParser[A])(block: AuthenticatedRequest[A] => Future[Result])(implicit handler: DeadboltHandler) : Action[A] =
deadboltActions.Dynamic(name, meta, handler)(bodyParser)(block)
}
}
그래서 컨트롤러 기능이 얻을 것이다이
def getProject(projectId: Int) = actionBuilder.DynamicAction(name = "checkProject", meta = Some(projectId)).defaultHandler() {
authRequest =>
//retrieves project
}
처럼 보일 것입니다 DynamicResourceHandler
(나는 이름이 좀 향후 버전에서 변경 될 수 있습니다 싫어 왔어요) 그리고 당신은 meta
값 asInstanceOf
를 사용해야합니다이 기능
def isAllowed[A](name: String,
meta: Option[Any] = None,
deadboltHandler: DeadboltHandler,
request: AuthenticatedRequest[A]): Future[Boolean]
의 구현을 호출합니다.
더 복잡한 요구 사항의 경우 데이터를 어셈블 한 모든 데이터 (예 : 사례 클래스 또는지도)를 meta
인수로 전달할 수 있습니다.
답변 해 주셔서 감사합니다. 그것은 내가 그것을 할 생각이었습니다. 나는 컨트롤러 대신 데드 볼트를 사용하는 방법에 대해서도 읽었지만 매개 변수 값에 바로 액세스하는 것이 더 어려울 것이라고 생각하십니까? – nmat
실제로 - 경로에서는 메타 만 하드 코딩 할 수 있습니다. 또는 URL을 직접 파싱하여 값을 얻을 수도 있지만 이미 상당히 무거워지고 있습니다. –