diff options
author | vlad <vlad@driver.xyz> | 2017-07-14 10:38:59 -0700 |
---|---|---|
committer | vlad <vlad@driver.xyz> | 2017-07-14 10:38:59 -0700 |
commit | 8353cc012328744c7cdfe0436e23d5e565bea570 (patch) | |
tree | 9ece288a43f30c3bd50393dd28fe17bf54b5e717 /src/main/scala/xyz/driver/pdsuicommon | |
parent | 93eb4829c0d11959709e18a7b489343550633e83 (diff) | |
download | rest-query-8353cc012328744c7cdfe0436e23d5e565bea570.tar.gz rest-query-8353cc012328744c7cdfe0436e23d5e565bea570.tar.bz2 rest-query-8353cc012328744c7cdfe0436e23d5e565bea570.zip |
Clean-up + New User constructor from Driver User
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuicommon')
3 files changed, 66 insertions, 9 deletions
diff --git a/src/main/scala/xyz/driver/pdsuicommon/acl/ACL.scala b/src/main/scala/xyz/driver/pdsuicommon/acl/ACL.scala index 0438dfc..276ef9f 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/acl/ACL.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/acl/ACL.scala @@ -243,12 +243,10 @@ object ACL extends PhiLogging { } private def check(action: String, isAllowed: AclCheck)(executorRoles: Set[Role]): Boolean = { - executorRoles.exists { role => - loggedError( - isAllowed(role), - phi"$role has no access to ${Unsafe(action)} a ${Unsafe(label)}" - ) - } + loggedError( + executorRoles.exists(isAllowed), + phi"${Unsafe(executorRoles.mkString(", "))} has no access to ${Unsafe(action)} a ${Unsafe(label)}" + ) } } } diff --git a/src/main/scala/xyz/driver/pdsuicommon/computation/Computation.scala b/src/main/scala/xyz/driver/pdsuicommon/computation/Computation.scala index 159c144..af7d051 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/computation/Computation.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/computation/Computation.scala @@ -72,6 +72,17 @@ final case class Computation[+R, +T](future: Future[Either[R, T]]) { }) } + def mapAll[R2, T2](onLeft: R => Computation[R2, T2])(onRight: T => Computation[R2, T2])( + onFailure: () => Computation[R2, T2])(implicit ec: ExecutionContext): Computation[R2, T2] = { + + Computation(future.flatMap { success => + if (success.isRight) onRight(success.right.get).future + else onLeft(success.left.get).future + } recoverWith { + case _ => onFailure().future + }) + } + def andThen(f: T => Any)(implicit ec: ExecutionContext): Computation[R, T] = map { a => f(a) a @@ -98,7 +109,6 @@ final case class Computation[+R, +T](future: Future[Either[R, T]]) { case Left(x) => x case Right(x) => x } - } object Computation { diff --git a/src/main/scala/xyz/driver/pdsuicommon/domain/User.scala b/src/main/scala/xyz/driver/pdsuicommon/domain/User.scala index ffc4bf9..cfc2270 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/domain/User.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/domain/User.scala @@ -2,7 +2,7 @@ package xyz.driver.pdsuicommon.domain import java.math.BigInteger import java.security.SecureRandom -import java.time.LocalDateTime +import java.time.{Instant, LocalDateTime, ZoneId} import xyz.driver.pdsuicommon.logging._ import xyz.driver.pdsuicommon.domain.User.Role @@ -14,7 +14,21 @@ case class User(id: StringId[User], roles: Set[Role], passwordHash: PasswordHash, latestActivity: Option[LocalDateTime], - deleted: Option[LocalDateTime]) + deleted: Option[LocalDateTime]) { + + def this(driverUser: xyz.driver.entities.users.UserInfo) { + this( + id = StringId[xyz.driver.pdsuicommon.domain.User](driverUser.id.value), + email = Email(driverUser.email.toString), + name = driverUser.name.toString, + roles = driverUser.roles.flatMap(User.mapRoles), + passwordHash = PasswordHash(""), + latestActivity = + driverUser.lastLoginTime.map(t => Instant.ofEpochMilli(t.millis).atZone(ZoneId.of("Z")).toLocalDateTime), + deleted = Option.empty[LocalDateTime] + ) + } +} object User { @@ -82,4 +96,39 @@ object User { def createPassword: String = new BigInteger(240, random).toString(32) + def mapRoles(coreRole: xyz.driver.core.auth.Role): Set[xyz.driver.pdsuicommon.domain.User.Role] = { + coreRole match { + case xyz.driver.entities.auth.AdministratorRole => + Set( + xyz.driver.pdsuicommon.domain.User.Role.SystemUser, + xyz.driver.pdsuicommon.domain.User.Role.RecordAdmin, + xyz.driver.pdsuicommon.domain.User.Role.TrialAdmin, + xyz.driver.pdsuicommon.domain.User.Role.TreatmentMatchingAdmin + ) + case xyz.driver.entities.auth.RecordAdmin => + Set(xyz.driver.pdsuicommon.domain.User.Role.RecordAdmin) + case xyz.driver.entities.auth.RecordCleaner => + Set(xyz.driver.pdsuicommon.domain.User.Role.RecordCleaner) + case xyz.driver.entities.auth.RecordOrganizer => + Set(xyz.driver.pdsuicommon.domain.User.Role.RecordOrganizer) + case xyz.driver.entities.auth.DocumentExtractor => + Set(xyz.driver.pdsuicommon.domain.User.Role.DocumentExtractor) + case xyz.driver.entities.auth.TrialSummarizer => + Set(xyz.driver.pdsuicommon.domain.User.Role.TrialSummarizer) + case xyz.driver.entities.auth.CriteriaCurator => + Set(xyz.driver.pdsuicommon.domain.User.Role.CriteriaCurator) + case xyz.driver.entities.auth.TrialAdmin => + Set(xyz.driver.pdsuicommon.domain.User.Role.TrialAdmin) + case xyz.driver.entities.auth.EligibilityVerifier => + Set(xyz.driver.pdsuicommon.domain.User.Role.EligibilityVerifier) + case xyz.driver.entities.auth.TreatmentMatchingAdmin => + Set(xyz.driver.pdsuicommon.domain.User.Role.TreatmentMatchingAdmin) + case xyz.driver.entities.auth.RoutesCurator => + Set(xyz.driver.pdsuicommon.domain.User.Role.RoutesCurator) + case xyz.driver.entities.auth.ResearchOncologist => + Set(xyz.driver.pdsuicommon.domain.User.Role.ResearchOncologist) + case _ => + Set.empty[xyz.driver.pdsuicommon.domain.User.Role] + } + } } |