diff --git a/atst/domain/audit_log.py b/atst/domain/audit_log.py index 0292920a..b40dc304 100644 --- a/atst/domain/audit_log.py +++ b/atst/domain/audit_log.py @@ -12,6 +12,15 @@ class AuditEventQuery(Query): query = db.session.query(cls.model).order_by(cls.model.time_created.desc()) return cls.paginate(query, pagination_opts) + @classmethod + def get_ws_events(cls, workspace_id, pagination_opts): + query = ( + db.session.query(cls.model) + .filter(cls.model.workspace_id == workspace_id) + .order_by(cls.model.time_created.desc()) + ) + return cls.paginate(query, pagination_opts) + class AuditLog(object): @classmethod @@ -26,13 +35,11 @@ class AuditLog(object): return AuditEventQuery.get_all(pagination_opts) @classmethod - def get_workspace_events(cls, workspace_id): - return ( - db.session.query(AuditEvent) - .filter(AuditEvent.workspace_id == workspace_id) - .order_by(AuditEvent.time_created.desc()) - .all() + def get_workspace_events(cls, user, workspace_id, pagination_opts): + Authorization.check_atat_permission( + user, Permissions.VIEW_AUDIT_LOG, "view audit log" ) + return AuditEventQuery.get_ws_events(workspace_id, pagination_opts) @classmethod def get_by_resource(cls, resource_id): diff --git a/atst/domain/common/__init__.py b/atst/domain/common/__init__.py index f829496f..684d4ce6 100644 --- a/atst/domain/common/__init__.py +++ b/atst/domain/common/__init__.py @@ -1 +1,2 @@ from .query import Query +from .query import Paginator diff --git a/atst/domain/common/query.py b/atst/domain/common/query.py index 07db46ef..0846387c 100644 --- a/atst/domain/common/query.py +++ b/atst/domain/common/query.py @@ -17,6 +17,13 @@ class Paginator(object): def __init__(self, query_set): self.query_set = query_set + @classmethod + def get_pagination_opts(cls, request, default_page=1, default_per_page=100): + return { + "page": int(request.args.get("page", default_page)), + "per_page": int(request.args.get("perPage", default_per_page)), + } + @classmethod def paginate(cls, query, pagination_opts=None): if pagination_opts is not None: diff --git a/atst/routes/__init__.py b/atst/routes/__init__.py index 7581eed3..07550af7 100644 --- a/atst/routes/__init__.py +++ b/atst/routes/__init__.py @@ -12,6 +12,7 @@ from atst.domain.users import Users from atst.domain.authnid import AuthenticationContext from atst.domain.audit_log import AuditLog from atst.domain.auth import logout as _logout +from atst.domain.common import Paginator from atst.utils.flash import formatted_flash as flash @@ -126,16 +127,9 @@ def logout(): return redirect(url_for(".root")) -def get_pagination_opts(request, default_page=1, default_per_page=100): - return { - "page": int(request.args.get("page", default_page)), - "per_page": int(request.args.get("perPage", default_per_page)), - } - - @bp.route("/activity-history") def activity_history(): - pagination_opts = get_pagination_opts(request) + pagination_opts = Paginator.get_pagination_opts(request) audit_events = AuditLog.get_all_events(g.current_user, pagination_opts) return render_template("audit_log/audit_log.html", audit_events=audit_events) diff --git a/atst/routes/workspaces/index.py b/atst/routes/workspaces/index.py index cad5e5b2..01e7b917 100644 --- a/atst/routes/workspaces/index.py +++ b/atst/routes/workspaces/index.py @@ -7,6 +7,7 @@ from atst.domain.reports import Reports from atst.domain.workspaces import Workspaces from atst.domain.audit_log import AuditLog from atst.domain.authz import Authorization +from atst.domain.common import Paginator from atst.forms.workspace import WorkspaceForm from atst.models.permissions import Permissions @@ -87,16 +88,16 @@ def workspace_reports(workspace_id): def workspace_activity(workspace_id): workspace = Workspaces.get(g.current_user, workspace_id) Authorization.check_workspace_permission( - g.current_user, - workspace, - # TODO: diff permission - Permissions.VIEW_USAGE_DOLLARS, - "view workspace reports", + g.current_user, workspace, Permissions.VIEW_AUDIT_LOG, "view workspace reports" + ) + pagination_opts = Paginator.get_pagination_opts(http_request) + audit_events = AuditLog.get_workspace_events( + g.current_user, workspace_id, pagination_opts ) - audit_events = AuditLog.get_workspace_events(workspace_id) return render_template( "workspaces/activity/index.html", workspace_name=workspace.name, + workspace_id=workspace_id, audit_events=audit_events, ) diff --git a/templates/components/pagination.html b/templates/components/pagination.html index 5b1c84a9..fe360a9f 100644 --- a/templates/components/pagination.html +++ b/templates/components/pagination.html @@ -1,4 +1,4 @@ -{% macro Page(pagination, route, i, label=None, disabled=False) -%} +{% macro Page(pagination, route, i, label=None, disabled=False, workspace_id=None) -%} {% set label = label or i %} {% set button_class = "page usa-button " %} @@ -11,38 +11,38 @@ {% set button_class = button_class + "usa-button-secondary" %} {% endif %} - {{ label }} + {{ label }} {%- endmacro %} -{% macro Pagination(pagination, route) -%} +{% macro Pagination(pagination, route, workspace_id=None) -%}