File: guardian.py

package info (click to toggle)
strawberry-graphql-django 0.62.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,968 kB
  • sloc: python: 27,530; sh: 17; makefile: 16
file content (35 lines) | stat: -rw-r--r-- 1,255 bytes parent folder | download
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
import contextlib
import dataclasses
from typing import Union, cast

from django.contrib.auth import get_user_model
from django.db import models
from guardian.conf import settings as guardian_settings
from guardian.models.models import GroupObjectPermissionBase, UserObjectPermissionBase
from guardian.utils import get_anonymous_user as _get_anonymous_user
from guardian.utils import get_group_obj_perms_model, get_user_obj_perms_model

from strawberry_django.utils.typing import UserType


@dataclasses.dataclass
class ObjectPermissionModels:
    user: UserObjectPermissionBase
    group: GroupObjectPermissionBase


def get_object_permission_models(
    model: Union[models.Model, type[models.Model]],
) -> ObjectPermissionModels:
    return ObjectPermissionModels(
        user=cast("UserObjectPermissionBase", get_user_obj_perms_model(model)),
        group=cast("GroupObjectPermissionBase", get_group_obj_perms_model(model)),
    )


def get_user_or_anonymous(user: UserType) -> UserType:
    username = guardian_settings.ANONYMOUS_USER_NAME or ""
    if user.is_anonymous and user.get_username() != username:
        with contextlib.suppress(get_user_model().DoesNotExist):
            return cast("UserType", _get_anonymous_user())
    return user