2019-07-02 09:51:50 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
#
|
2021-04-08 06:59:14 +00:00
|
|
|
from django.contrib.auth.mixins import UserPassesTestMixin
|
2022-07-04 03:29:39 +00:00
|
|
|
from django.http.response import JsonResponse
|
2023-08-29 06:21:06 +00:00
|
|
|
from django.db.models import Model
|
2023-08-29 07:16:02 +00:00
|
|
|
from django.utils import translation
|
2021-09-12 13:00:51 +00:00
|
|
|
from rest_framework import permissions
|
2021-10-21 08:16:50 +00:00
|
|
|
from rest_framework.request import Request
|
2019-07-02 09:51:50 +00:00
|
|
|
|
2023-08-29 06:21:06 +00:00
|
|
|
from audits.const import ActivityChoices
|
2023-08-28 07:43:45 +00:00
|
|
|
from audits.handler import create_or_update_operate_log
|
|
|
|
from audits.models import ActivityLog
|
2022-07-04 03:29:39 +00:00
|
|
|
from common.exceptions import UserConfirmRequired
|
2023-06-14 08:21:46 +00:00
|
|
|
from orgs.utils import current_org
|
2019-07-02 09:51:50 +00:00
|
|
|
|
2022-11-11 07:11:10 +00:00
|
|
|
__all__ = [
|
|
|
|
"PermissionsMixin",
|
|
|
|
"RecordViewLogMixin",
|
|
|
|
"UserConfirmRequiredExceptionMixin",
|
|
|
|
]
|
2022-07-04 03:29:39 +00:00
|
|
|
|
|
|
|
|
|
|
|
class UserConfirmRequiredExceptionMixin:
|
|
|
|
"""
|
|
|
|
异常处理
|
|
|
|
"""
|
2022-11-11 07:11:10 +00:00
|
|
|
|
2022-07-04 03:29:39 +00:00
|
|
|
def dispatch(self, request, *args, **kwargs):
|
|
|
|
try:
|
|
|
|
return super().dispatch(request, *args, **kwargs)
|
|
|
|
except UserConfirmRequired as e:
|
|
|
|
return JsonResponse(e.detail, status=e.status_code)
|
2021-04-08 06:59:14 +00:00
|
|
|
|
|
|
|
|
|
|
|
class PermissionsMixin(UserPassesTestMixin):
|
|
|
|
permission_classes = [permissions.IsAuthenticated]
|
2021-10-21 08:16:50 +00:00
|
|
|
request: Request
|
2021-04-08 06:59:14 +00:00
|
|
|
|
|
|
|
def get_permissions(self):
|
|
|
|
return self.permission_classes
|
|
|
|
|
|
|
|
def test_func(self):
|
|
|
|
permission_classes = self.get_permissions()
|
|
|
|
for permission_class in permission_classes:
|
|
|
|
if not permission_class().has_permission(self.request, self):
|
|
|
|
return False
|
2021-04-29 09:15:46 +00:00
|
|
|
return True
|
2022-05-05 06:42:09 +00:00
|
|
|
|
|
|
|
|
|
|
|
class RecordViewLogMixin:
|
2023-08-29 06:21:06 +00:00
|
|
|
model: Model
|
2022-05-05 06:42:09 +00:00
|
|
|
|
2023-08-29 06:21:06 +00:00
|
|
|
def record_logs(self, ids, action, detail, model=None, **kwargs):
|
2023-08-29 07:16:02 +00:00
|
|
|
with translation.override('en'):
|
|
|
|
model = model or self.model
|
|
|
|
resource_type = model._meta.verbose_name
|
|
|
|
create_or_update_operate_log(
|
|
|
|
action, resource_type, force=True, **kwargs
|
2023-03-27 09:17:20 +00:00
|
|
|
)
|
2023-08-29 07:16:02 +00:00
|
|
|
activities = [
|
|
|
|
ActivityLog(
|
|
|
|
resource_id=resource_id, type=ActivityChoices.operate_log,
|
|
|
|
detail=detail, org_id=current_org.id,
|
|
|
|
)
|
|
|
|
for resource_id in ids
|
|
|
|
]
|
|
|
|
ActivityLog.objects.bulk_create(activities)
|