Skip to content

Commit

Permalink
batch permissions without tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Vivek Dasari committed Oct 5, 2015
1 parent 673e5b0 commit dec9304
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 12 deletions.
Expand Up @@ -132,8 +132,7 @@ trait PermissionsClient {
try {
Await.result(db.run(addPermissionAction), timeout)
} catch {
case ex:Throwable => throw new Exception(s"User ${userEmail} already has some permissions on ${agoraEntity}. " +
s"Consider using PUT to edit the user's permissions.")
case ex:Throwable => editPermission(agoraEntity, userAccessObject)
}
}

Expand Down
Expand Up @@ -3,6 +3,7 @@ package org.broadinstitute.dsde.agora.server.webservice

import akka.actor.Props
import kamon.spray.KamonTraceDirectives._
import org.broadinstitute.dsde.agora.server.dataaccess.permissions.AccessControl
import org.broadinstitute.dsde.agora.server.model.AgoraApiJsonSupport._
import org.broadinstitute.dsde.agora.server.model.AgoraEntity
import org.broadinstitute.dsde.agora.server.webservice.handlers.{PermissionHandler, QueryHandler, AddHandler}
Expand Down Expand Up @@ -30,19 +31,25 @@ abstract class AgoraService extends HttpService with RouteHelpers {
def namespacePermissionsRoute =
matchNamespacePermissionsRoute(path) { (namespace, username) =>
parameterMap { (params) =>
val entity = AgoraEntity(Option(namespace))
val agoraEntity = AgoraEntity(Option(namespace))

// Accept batch POST // TODO: move to transactional support
entity(as[List[AccessControl]]) { (listOfAccessControl) =>
post { requestContext =>
completeBatchNamespacePermissionsPost(requestContext, agoraEntity, listOfAccessControl, username, permissionHandlerProps)
}
} ~
get { requestContext =>
completeNamespacePermissionsGet(requestContext, entity, username, permissionHandlerProps)
completeNamespacePermissionsGet(requestContext, agoraEntity, username, permissionHandlerProps)
} ~
post { requestContext =>
completeNamespacePermissionsPost(requestContext, entity, params, username, permissionHandlerProps)
completeNamespacePermissionsPost(requestContext, agoraEntity, params, username, permissionHandlerProps)
} ~
put { requestContext =>
completeNamespacePermissionsPut(requestContext, entity, params, username, permissionHandlerProps)
completeNamespacePermissionsPut(requestContext, agoraEntity, params, username, permissionHandlerProps)
} ~
delete { requestContext =>
completeNamespacePermissionsDelete(requestContext, entity, params, username, permissionHandlerProps)
completeNamespacePermissionsDelete(requestContext, agoraEntity, params, username, permissionHandlerProps)
}

}
Expand All @@ -51,19 +58,25 @@ abstract class AgoraService extends HttpService with RouteHelpers {
def entityPermissionsRoute =
matchEntityPermissionsRoute(path) { (namespace, name, snapshotId, username) =>
parameterMap { (params) =>
val entity = AgoraEntity(Option(namespace), Option(name), Option(snapshotId))
val agoraEntity = AgoraEntity(Option(namespace), Option(name), Option(snapshotId))

// Accept batch POST // TODO: move to transactional support
entity(as[List[AccessControl]]) { (listOfAccessControl) =>
post { requestContext =>
completeBatchEntityPermissionsPost(requestContext, agoraEntity, listOfAccessControl, username, permissionHandlerProps)
}
} ~
get { requestContext =>
completeEntityPermissionsGet(requestContext, entity, username, permissionHandlerProps)
completeEntityPermissionsGet(requestContext, agoraEntity, username, permissionHandlerProps)
} ~
post { requestContext =>
completeEntityPermissionsPost(requestContext, entity, params, username, permissionHandlerProps)
completeEntityPermissionsPost(requestContext, agoraEntity, params, username, permissionHandlerProps)
} ~
put { requestContext =>
completeEntityPermissionsPut(requestContext, entity, params, username, permissionHandlerProps)
completeEntityPermissionsPut(requestContext, agoraEntity, params, username, permissionHandlerProps)
} ~
delete { requestContext =>
completeEntityPermissionsDelete(requestContext, entity, params, username, permissionHandlerProps)
completeEntityPermissionsDelete(requestContext, agoraEntity, params, username, permissionHandlerProps)
}

}
Expand Down
Expand Up @@ -30,6 +30,13 @@ class PermissionHandler extends Actor {
context.parent ! RequestComplete(userAccess)
context.stop(self)

case InsertBatchNamespacePermission(_context: RequestContext, entity: AgoraEntity, requester: String, userAccessList: List[AccessControl]) =>
val rowsChanged = userAccessList.map(userAccess =>
permissionBusiness.insertNamespacePermission(entity, requester, userAccess)
).sum
context.parent ! RequestComplete(userAccessList)
context.stop(self)

case EditNamespacePermission(_context: RequestContext, entity: AgoraEntity, requester: String, userAccess: AccessControl) =>
val rowsChanged = permissionBusiness.editNamespacePermission(entity, requester, userAccess)
context.parent ! RequestComplete(userAccess)
Expand All @@ -50,6 +57,13 @@ class PermissionHandler extends Actor {
context.parent ! RequestComplete(userAccess)
context.stop(self)

case InsertBatchEntityPermission(_context: RequestContext, entity: AgoraEntity, requester: String, userAccessList: List[AccessControl]) =>
val rowsChanged = userAccessList.map(userAccess =>
permissionBusiness.insertEntityPermission(entity, requester, userAccess)
).sum
context.parent ! RequestComplete(userAccessList)
context.stop(self)

case EditEntityPermission(_context: RequestContext, entity: AgoraEntity, requester: String, userAccess: AccessControl) =>
val rowsChanged = permissionBusiness.editEntityPermission(entity, requester, userAccess)
context.parent ! RequestComplete(userAccess)
Expand Down
Expand Up @@ -6,6 +6,7 @@ import org.broadinstitute.dsde.agora.server.dataaccess.permissions.AccessControl
import org.broadinstitute.dsde.agora.server.dataaccess.permissions.AgoraEntityPermissionsClient._
import org.broadinstitute.dsde.agora.server.model.{AgoraEntity, AgoraEntityProjection, AgoraEntityType}
import org.broadinstitute.dsde.agora.server.webservice.PerRequestCreator
import org.broadinstitute.dsde.agora.server.webservice.handlers.PermissionHandler
import org.broadinstitute.dsde.agora.server.webservice.util.ServiceMessages._
import spray.routing.{Directive0, Directives, RequestContext}

Expand Down Expand Up @@ -41,6 +42,12 @@ trait NamespacePermissionsRouteHelper extends BaseRoute {
perRequest(context, permissionsHandler, message)
}

def completeBatchNamespacePermissionsPost(context: RequestContext, entity: AgoraEntity, accessObjects: List[AccessControl], username: String, permissionHandler: Props) = {
accessObjects.foreach(accessObject => addUserIfNotInDatabase(accessObject.user))
val message = InsertBatchNamespacePermission(context, entity, username, accessObjects)
perRequest(context, permissionHandler, message)
}

def completeNamespacePermissionsPost(context: RequestContext, entity: AgoraEntity, params: Map[String, String], username: String, permissionsHandler: Props) ={
addUserIfNotInDatabase(username)
val accessObject = AccessControl.fromParams(params)
Expand Down Expand Up @@ -75,6 +82,12 @@ trait EntityPermissionsRouteHelper extends BaseRoute {
perRequest(context, permissionsHandler, message)
}

def completeBatchEntityPermissionsPost(context: RequestContext, entity: AgoraEntity, accessObjects: List[AccessControl], username: String, permissionHandler: Props) = {
accessObjects.foreach(accessObject => addUserIfNotInDatabase(accessObject.user))
val message = InsertBatchEntityPermission(context, entity, username, accessObjects)
perRequest(context, permissionHandler, message)
}

def completeEntityPermissionsPost(context: RequestContext, entity: AgoraEntity, params: Map[String, String], username: String, permissionsHandler: Props) = {
addUserIfNotInDatabase(username)
val accessObject = AccessControl.fromParams(params)
Expand Down
Expand Up @@ -19,6 +19,11 @@ object ServiceMessages {
username: String,
accessObject: AccessControl)

case class InsertBatchNamespacePermission(requestContext: RequestContext,
entity: AgoraEntity,
username: String,
accessObjects: List[AccessControl])

case class EditNamespacePermission(requestContext: RequestContext,
entity: AgoraEntity,
username: String,
Expand All @@ -39,6 +44,11 @@ object ServiceMessages {
username: String,
accessObject: AccessControl)

case class InsertBatchEntityPermission(requestContext: RequestContext,
entity: AgoraEntity,
username: String,
accessObjects: List[AccessControl])

case class EditEntityPermission(requestContext: RequestContext,
entity: AgoraEntity,
username: String,
Expand Down

0 comments on commit dec9304

Please sign in to comment.