I have code in the Play Scala application (2.5x, 2.11.11), which so far works very simply (it is based on the following link: https://fizzylogic.nl/2016/11/27/authorize-access-to-your -play-application-using-action-builders-and-action-functions / ). But now I need to pass another instance of the class to the ApplicationAuthorizationHandler class (NOTE: in all my code I use Guice DI to enter parameters into class constructors).
Current Code:
class ApplicationAuthorizationHandler
extends AuthorizationHandler {
...
}
trait AuthorizationHandler {
...
}
trait AuthorizationCheck {
def authorizationHandler: AuthorizationHandler = new ApplicationAuthorizationHandler
object AuthenticatedAction extends ActionBuilder[RequestWithPrincipal] {
override def invokeBlock[A](request: Request[A], block: (RequestWithPrincipal[A]) => Future[Result]): Future[Result] = {
def unauthorizedAction = authorizationHandler.unauthorized(RequestWithOptionalPrincipal(None, request))
def authorizedAction(principal: Principal) = block(RequestWithPrincipal(principal, request))
authorizationHandler.principal(request).fold(unauthorizedAction)(authorizedAction)
}
}
}
class MyController @Inject() extends Controller with AuthorizationCheck {
def myAction = AuthenticatedAction { implicit request =>
...
}
Required Code:
class ApplicationAuthorizationHandler @Inject() (userService: UserService)
extends AuthorizationHandler {
...
}
ApplicationAuthorizationHandler AuthorizationCheck, UserService. , , ( ).
-, /?
, , ApplicationAuthorizationHandler AuthorizationCheck ?
?