From 91285f8b8ac9ff9e68f811638bcc6be5bc1a902b Mon Sep 17 00:00:00 2001 From: vlad Date: Fri, 3 Feb 2017 15:59:33 -0500 Subject: Abstracting out Authorization rules and passing it ServiceRequestContext --- src/main/scala/xyz/driver/core/rest.scala | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/main/scala/xyz/driver/core/rest.scala') diff --git a/src/main/scala/xyz/driver/core/rest.scala b/src/main/scala/xyz/driver/core/rest.scala index fd6763e..675e76c 100644 --- a/src/main/scala/xyz/driver/core/rest.scala +++ b/src/main/scala/xyz/driver/core/rest.scala @@ -70,12 +70,17 @@ object rest { val SetAuthenticationTokenHeader = "set-authorization" } + trait Authorization { + def userHasPermission(user: User, permission: Permission)(implicit ctx: ServiceRequestContext): Future[Boolean] + } + trait AuthProvider[U <: User] { import akka.http.scaladsl.server._ import Directives._ protected implicit val execution: ExecutionContext + protected val authorization: Authorization /** * Specific implementation on how to extract user from request context, @@ -86,8 +91,6 @@ object rest { */ protected def authenticatedUser(context: ServiceRequestContext): OptionT[Future, U] - protected def userHasPermission(user: U, permission: Permission): Future[Boolean] - def authorize(permissions: Permission*): Directive1[U] = { serviceContext flatMap { ctx => @@ -95,7 +98,7 @@ object rest { userOption.traverse[Future, (U, Boolean)] { user => permissions .toList - .traverse[Future, Boolean](userHasPermission(user, _)) + .traverse[Future, Boolean](authorization.userHasPermission(user, _)(ctx)) .map(results => user -> results.forall(identity)) } }).flatMap { -- cgit v1.2.3