extend soft delete functionality to app and env roles
This commit is contained in:
@@ -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()
|
||||
|
@@ -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",
|
||||
|
@@ -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()
|
||||
|
@@ -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()
|
||||
|
@@ -1,3 +1,4 @@
|
||||
from .timestamps import TimestampsMixin
|
||||
from .auditable import AuditableMixin
|
||||
from .permissions import PermissionsMixin
|
||||
from .deletable import DeletableMixin
|
||||
|
6
atst/models/mixins/deletable.py
Normal file
6
atst/models/mixins/deletable.py
Normal 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())
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user