extend soft delete functionality to app and env roles

This commit is contained in:
dandds
2019-04-10 10:42:36 -04:00
parent dac764ab82
commit 0bde431a70
15 changed files with 81 additions and 35 deletions

View File

@@ -1,4 +1,4 @@
from sqlalchemy import Column, ForeignKey, String, Boolean
from sqlalchemy import Column, ForeignKey, String
from sqlalchemy.orm import relationship
from atst.models import Base
@@ -6,7 +6,9 @@ from atst.models.types import Id
from atst.models import mixins
class Application(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
class Application(
Base, mixins.TimestampsMixin, mixins.AuditableMixin, mixins.DeletableMixin
):
__tablename__ = "applications"
id = Id()
@@ -22,8 +24,6 @@ class Application(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
)
roles = relationship("ApplicationRole")
deleted = Column(Boolean, default=False)
@property
def users(self):
return set(role.user for role in self.roles)
@@ -43,9 +43,4 @@ class Application(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
@property
def history(self):
previous_state = self.get_changes()
change_set = {}
if "deleted" in previous_state:
change_set["deleted"] = previous_state["deleted"]
return change_set
return self.get_changes()

View File

@@ -26,7 +26,11 @@ application_roles_permission_sets = Table(
class ApplicationRole(
Base, mixins.TimestampsMixin, mixins.AuditableMixin, mixins.PermissionsMixin
Base,
mixins.TimestampsMixin,
mixins.AuditableMixin,
mixins.PermissionsMixin,
mixins.DeletableMixin,
):
__tablename__ = "application_roles"
@@ -51,6 +55,10 @@ class ApplicationRole(
self.application.name, self.user_id, self.id, self.permissions
)
@property
def history(self):
return self.get_changes()
Index(
"application_role_user_application",

View File

@@ -1,4 +1,4 @@
from sqlalchemy import Column, ForeignKey, String, Boolean
from sqlalchemy import Column, ForeignKey, String
from sqlalchemy.orm import relationship
from atst.models import Base
@@ -6,7 +6,9 @@ from atst.models.types import Id
from atst.models import mixins
class Environment(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
class Environment(
Base, mixins.TimestampsMixin, mixins.AuditableMixin, mixins.DeletableMixin
):
__tablename__ = "environments"
id = Id()
@@ -17,8 +19,6 @@ class Environment(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
cloud_id = Column(String)
deleted = Column(Boolean, default=False)
@property
def users(self):
return [r.user for r in self.roles]
@@ -49,9 +49,4 @@ class Environment(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
@property
def history(self):
previous_state = self.get_changes()
change_set = {}
if "deleted" in previous_state:
change_set["deleted"] = previous_state["deleted"]
return change_set
return self.get_changes()

View File

@@ -13,7 +13,9 @@ class CSPRole(Enum):
TECHNICAL_READ = "Technical Read-only"
class EnvironmentRole(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
class EnvironmentRole(
Base, mixins.TimestampsMixin, mixins.AuditableMixin, mixins.DeletableMixin
):
__tablename__ = "environment_roles"
id = types.Id()

View File

@@ -1,3 +1,4 @@
from .timestamps import TimestampsMixin
from .auditable import AuditableMixin
from .permissions import PermissionsMixin
from .deletable import DeletableMixin

View File

@@ -0,0 +1,6 @@
from sqlalchemy import Column, Boolean
from sqlalchemy.sql import expression
class DeletableMixin(object):
deleted = Column(Boolean, nullable=False, server_default=expression.false())

View File

@@ -25,7 +25,11 @@ class User(
permission_sets = relationship("PermissionSet", secondary=users_permission_sets)
portfolio_roles = relationship("PortfolioRole", backref="user")
application_roles = relationship("ApplicationRole", backref="user")
application_roles = relationship(
"ApplicationRole",
backref="user",
primaryjoin="and_(ApplicationRole.user_id==User.id, ApplicationRole.deleted==False)",
)
email = Column(String, unique=True)
dod_id = Column(String, unique=True, nullable=False)