aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver
diff options
context:
space:
mode:
authorvlad <vlad@driver.xyz>2017-02-03 15:59:33 -0500
committervlad <vlad@driver.xyz>2017-02-03 15:59:33 -0500
commit91285f8b8ac9ff9e68f811638bcc6be5bc1a902b (patch)
treeae5258e7e0efbccbaa2fc6f29ce54f5c1f8365ed /src/main/scala/xyz/driver
parentd40802300cb84886ef371d31841f0831051a5117 (diff)
downloaddriver-core-7b548aba7f428938fb6ed413b67bbe19c28cb8f6.tar.gz
driver-core-7b548aba7f428938fb6ed413b67bbe19c28cb8f6.tar.bz2
driver-core-7b548aba7f428938fb6ed413b67bbe19c28cb8f6.zip
Abstracting out Authorization rules and passing it ServiceRequestContextv0.10.5
Diffstat (limited to 'src/main/scala/xyz/driver')
-rw-r--r--src/main/scala/xyz/driver/core/rest.scala9
1 files changed, 6 insertions, 3 deletions
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 {