File size: 904 Bytes
b4f2238
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
"""Module for admin access."""

from __future__ import annotations

from typing import Any

from django.http import HttpRequest

from apps.core.exceptions import PermissionDenied


def get_request_user(request: HttpRequest) -> Any | None:
    user = getattr(request, "user", None)
    if user and getattr(user, "is_authenticated", False):
        return user
    return getattr(request, "auth", None)


def is_admin_user(user: Any | None) -> bool:
    return bool(
        user
        and (
            getattr(user, "is_admin", False) or getattr(user, "is_superuser", False) or getattr(user, "is_staff", False)
        )
    )


def ensure_admin_request(
    request: HttpRequest,
    *,
    message: str = "无权限执行该操作",
    code: str = "PERMISSION_DENIED",
) -> None:
    if is_admin_user(get_request_user(request)):
        return
    raise PermissionDenied(message=message, code=code)