Move custom audit log logic into the User class

This commit is contained in:
leigh-mil 2019-08-19 09:56:43 -04:00
parent 0d6f7aa3cc
commit 2776926dea
4 changed files with 19 additions and 9 deletions

View File

@ -54,8 +54,7 @@ class AuditableMixin(object):
@staticmethod @staticmethod
def audit_update(mapper, connection, target): def audit_update(mapper, connection, target):
changes = AuditableMixin.get_changes(target) if AuditableMixin.get_changes(target):
if changes and not "last_login" in changes:
target.create_audit_event(connection, target, ACTION_UPDATE) target.create_audit_event(connection, target, ACTION_UPDATE)
def get_changes(self): def get_changes(self):

View File

@ -7,7 +7,11 @@ from atst.models import Base, ApplicationRole, types, mixins
from atst.models.permissions import Permissions from atst.models.permissions import Permissions
from atst.models.portfolio_invitation import PortfolioInvitation from atst.models.portfolio_invitation import PortfolioInvitation
from atst.models.application_invitation import ApplicationInvitation from atst.models.application_invitation import ApplicationInvitation
from atst.models.mixins.auditable import record_permission_sets_updates from atst.models.mixins.auditable import (
AuditableMixin,
ACTION_UPDATE,
record_permission_sets_updates,
)
users_permission_sets = Table( users_permission_sets = Table(
@ -121,5 +125,11 @@ class User(
if c.name not in ["id"] if c.name not in ["id"]
} }
@staticmethod
def audit_update(mapper, connection, target):
changes = AuditableMixin.get_changes(target)
if changes and not "last_login" in changes:
target.create_audit_event(connection, target, ACTION_UPDATE)
listen(User.permission_sets, "bulk_replace", record_permission_sets_updates, raw=True) listen(User.permission_sets, "bulk_replace", record_permission_sets_updates, raw=True)

View File

@ -51,9 +51,3 @@ def test_logging_audit_event_on_update(mock_logger):
assert event_log["action"] == "update" assert event_log["action"] == "update"
assert "update" in mock_logger.extras[1]["tags"] assert "update" in mock_logger.extras[1]["tags"]
def test_does_not_log_user_update_when_updating_last_login(mock_logger):
user = UserFactory.create()
Users.update_last_login(user)
assert "Audit Event update" not in mock_logger.messages

View File

@ -1,6 +1,7 @@
import pytest import pytest
from sqlalchemy.exc import InternalError from sqlalchemy.exc import InternalError
from atst.domain.users import Users
from atst.models.user import User from atst.models.user import User
from tests.factories import UserFactory, ApplicationFactory, ApplicationRoleFactory from tests.factories import UserFactory, ApplicationFactory, ApplicationRoleFactory
@ -37,3 +38,9 @@ def test_deleted_application_roles_are_ignored(session):
session.commit() session.commit()
assert len(user.application_roles) == 0 assert len(user.application_roles) == 0
def test_does_not_log_user_update_when_updating_last_login(mock_logger):
user = UserFactory.create()
Users.update_last_login(user)
assert "Audit Event update" not in mock_logger.messages