app/permissions/PermissionActionCheck.scala (54 lines of code) (raw):
package permissions
import com.gu.permissions.PermissionDefinition
import com.gu.pandomainauth.action.UserRequest
import play.api.Logging
import play.api.mvc.{ActionFilter, Results}
import scala.concurrent.{Future, ExecutionContext}
trait PermissionActionFilter extends ActionFilter[UserRequest] with Logging {
val testAccess: String => Boolean
val restrictedAction: String
override def filter[A](request: UserRequest[A]) =
if (request.user.email == "hmac-authed-service") {
Future.successful(None)
} else {
val hasAccess = testAccess(request.user.email)
if (hasAccess) {
Future.successful(None)
} else {
logger.info(s"user not authorized to $restrictedAction")
Future.successful(Some(Results.Unauthorized))
}
}
}
abstract class BasePermissionCheck(
val permission: PermissionDefinition,
val restrictedAction: String
)(implicit val executionContext: ExecutionContext) extends PermissionActionFilter {
val testAccess: String => Boolean = Permissions.testUser(permission)
}
// Tag Edit
case class CreateTagPermissionsCheck()(implicit executionContext: ExecutionContext)
extends BasePermissionCheck(Permissions.TagEdit, "create tag")
case class UpdateTagPermissionsCheck()(implicit executionContext: ExecutionContext)
extends BasePermissionCheck(Permissions.TagEdit, "update tag")
// Tag Admin
case class AddEditionToSectionPermissionsCheck()(implicit executionContext: ExecutionContext)
extends BasePermissionCheck(Permissions.TagAdmin, "add edition to section")
case class RemoveEditionFromSectionPermissionsCheck()(implicit executionContext: ExecutionContext)
extends BasePermissionCheck(Permissions.TagAdmin, "remove edition from section")
case class DeleteTagPermissionsCheck()(implicit executionContext: ExecutionContext)
extends BasePermissionCheck(Permissions.TagAdmin, "delete tag")
case class DeleteJobPermissionsCheck()(implicit executionContext: ExecutionContext)
extends BasePermissionCheck(Permissions.TagAdmin, "delete job")
case class MergeTagPermissionsCheck()(implicit executionContext: ExecutionContext)
extends BasePermissionCheck(Permissions.TagAdmin, "merge tag")
case class JobDeletePermissionsCheck()(implicit executionContext: ExecutionContext)
extends BasePermissionCheck(Permissions.TagAdmin, "job delete")
case class JobRollbackPermissionsCheck()(implicit executionContext: ExecutionContext)
extends BasePermissionCheck(Permissions.TagAdmin, "job rollback")
case class ModifySectionExpiryPermissionsCheck()(implicit executionContext: ExecutionContext)
extends BasePermissionCheck(Permissions.TagAdmin,"trigger unexpiry of section content")
// Other Permissions
case class ManageSponsorshipsPermissionsCheck()(implicit executionContext: ExecutionContext)
extends BasePermissionCheck(Permissions.CommercialTags, "manage sponsorships")
case class TriggerMigrationPermissionsCheck()(implicit executionContext: ExecutionContext)
extends BasePermissionCheck(Permissions.TagAdmin, "trigger migration")
case class PillarPermissionsCheck()(implicit executionContext: ExecutionContext)
extends BasePermissionCheck(Permissions.TagAdmin, "manage pillars")