Instantly share code, notes, and snippets.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SELECT * FROM MYTABLE |
lforite
/ authorization_predicate_testing_custom_predicates.scala
Last active
October 22, 2021 09:13
Scala web series Pt. 1 testing our custom predicates
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"HasProject" should { | |
"return true for any user who has this project" in { | |
forAll("projectId", "allProjects") { (projectId: UUID, allProjects: Set[UUID]) => | |
val projects = (allProjects + projectId).toSeq | |
HasProject(projectId).evaluate( | |
Token(..., projectIds = projectIds) | |
) mustBe true | |
} | |
} |
lforite
/ authorization_predicate_scalacheck.scala
Last active
October 22, 2021 08:13
Scala web series Pt. 1 testing and and or logic
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"&& should respect AND boolean logic" in forAll() { (boolean1: Boolean, boolean2: Boolean) => | |
val anyToken = Token(...) | |
val predicate1 = new AuthorizationPredicate { | |
override def evaluate(token: token): Boolean = boolean1 | |
} | |
val predicate2 = new AuthorizationPredicate { | |
override def evaluate(token: token): Boolean = boolean2 | |
} | |
(predicate1 && predicate2).evaluate(anyToken) mustBe (boolean1 && boolean2) |
lforite
/ authorization_predicate_authorize_ops_usage.scala
Created
October 22, 2021 07:55
Scala web series Pt. 1 authorize a request based on its truthfulness usage
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import AuthorizationOps._ | |
( | |
(HasClient(request.clientId) && | |
HasProjects(request.projects)) && | |
(HasPermission("data.write") || ("data.all")) | |
).authorize(token) { | |
// your code if authorized | |
} |
lforite
/ authorization_predicate_authorize_ops.scala
Last active
October 22, 2021 09:43
Scala web series Pt. 1 authorize a request based on its truthfulness
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
implicit AuthorizationOps(predicate: AuthorizationPredicate) { | |
def authorize[T](token: Token)(f: => Future[T]): Future[T] { | |
if(predicate.evaluate(token)) { | |
f() | |
} else { | |
Future.failed(AuthorizationException("...")) | |
} | |
} | |
} |
lforite
/ authorization_predicate_combined.scala
Created
October 22, 2021 07:51
Scala web series Pt. 1 combined authorization predicates
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
( | |
HasClient(request.clientId) && | |
HasProjects(request.projects) && | |
( | |
HasPermission("data.write") || | |
HasPermission("data.all") | |
) | |
).evaluate(token) |
lforite
/ authorization_predicate_combinators.scala
Created
October 22, 2021 07:48
Scala web series Pt. 1 authorization predicate combinators
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trait AuthorizationPredicate { self => | |
def evaluate(token: Token): Boolean | |
def &&(predicate: AuthorizationPredicate): AuthorizationPredicate = new AuthorizationPredicate { | |
override def evaluate(token: Token): Boolean = self.evaluate(token) && predicate.evaluate(token) | |
} | |
def ||(predicate: AuthorizationPredicate): AuthorizationPredicate = new AuthorizationPredicate { | |
override def evaluate(token: token): Boolean = self.evaluate(token) || predicate.evaluate(token) | |
} |
lforite
/ authorization_predicates.scala
Created
October 22, 2021 07:45
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
case class HasPermission(permission: String) extends AuthorizationPredicate { | |
override def evaluate(token: Token): Boolean = token.permissions.contains(permission) | |
} | |
case class HasPermissions(permissions: List[String]) extends AuthorizationPredicate { | |
override def evaluate(token: Token): Boolean = permission.forall(token.permissions.contains) | |
} | |
case class HasClient(clientId: UUID) extends AuthorizationPredicate { | |
override def evaluate(token: Token): Boolean = token.clientId == clientId |
lforite
/ authorization_predicate_always_true.scala
Created
October 22, 2021 07:42
Scala web series Pt. 1 always true predicate
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
val alwaysTruePredicate = new AuthorizationPredicate { | |
override def evaluate(token: Token): Boolean = true | |
} | |
val isAuthorized = alwaysTruePredicate.evaluate(token) //will always be true |
lforite
/ authorization_predicate.scala
Created
October 22, 2021 07:41
Scala web series Pt. 1 authorization predicate
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trait AuthorizationPredicate { | |
def evaluate(token: Token): Boolean | |
} |
NewerOlder