diff --git a/alembic/versions/875841fac207_add_audit_events_table.py b/alembic/versions/875841fac207_add_audit_events_table.py index 2b573a9e..56266c18 100644 --- a/alembic/versions/875841fac207_add_audit_events_table.py +++ b/alembic/versions/875841fac207_add_audit_events_table.py @@ -28,6 +28,7 @@ def upgrade(): sa.Column('resource_id', postgresql.UUID(as_uuid=True), nullable=False), sa.Column('action', sa.String(), nullable=False), sa.Column('workspace_id', postgresql.UUID(as_uuid=True), nullable=True), + sa.Column('request_id', postgresql.UUID(as_uuid=True), nullable=True), sa.ForeignKeyConstraint(['user_id'], ['users.id']), sa.ForeignKeyConstraint(['workspace_id'], ['workspaces.id']), sa.PrimaryKeyConstraint('id') diff --git a/atst/models/audit_event.py b/atst/models/audit_event.py index d95da99c..6b36b486 100644 --- a/atst/models/audit_event.py +++ b/atst/models/audit_event.py @@ -17,6 +17,8 @@ class AuditEvent(Base, TimestampsMixin): workspace_id = Column(UUID(as_uuid=True), ForeignKey("workspaces.id"), index=True) workspace = relationship("Workspace", backref="audit_events") + request_id = Column(UUID(as_uuid=True), ForeignKey("request.id"), index=True) + resource_type = Column(String(), nullable=False) resource_id = Column(UUID(as_uuid=True), index=True, nullable=False) display_name = Column(String()) @@ -31,13 +33,14 @@ class AuditEvent(Base, TimestampsMixin): self.action, self.resource_type, self.resource_id ) display_name_str = "({})".format(self.display_name) if self.display_name else "" - workspace_str = ( - "in workspace {}".format(self.workspace_id) - if self.workspace_id and self.resource_type != "workspace" - else "" - ) - return " ".join([user_str, action_str, display_name_str, workspace_str]) + scope_str = "" + if self.request_id and self.resource_type != "request": + scope_str = "for request {}".format(self.request_id) + elif self.workspace_id and self.resource_type != "workspace": + scope_str = "in workspace {}".format(self.request_id) + + return " ".join([user_str, action_str, display_name_str, scope_str]) def save(self, connection): attrs = inspect(self).dict diff --git a/atst/models/mixins/auditable.py b/atst/models/mixins/auditable.py index e0fb3710..2a47d1c9 100644 --- a/atst/models/mixins/auditable.py +++ b/atst/models/mixins/auditable.py @@ -26,12 +26,14 @@ class AuditableMixin(object): def create_audit_event(connection, resource, action): user_id = getattr_path(g, "current_user.id") workspace_id = resource.auditable_workspace_id() + request_id = resource.auditable_request_id() resource_type = resource.auditable_resource_type() display_name = resource.auditable_displayname() audit_event = AuditEvent( user_id=user_id, workspace_id=workspace_id, + request_id=request_id, resource_type=resource_type, resource_id=resource.id, display_name=display_name, @@ -66,5 +68,8 @@ class AuditableMixin(object): def auditable_workspace_id(self): return getattr_path(self, "workspace_id") + def auditable_request_id(self): + return getattr_path(self, "request_id") + def auditable_displayname(self): return getattr_path(self, "displayname")