2024-07-15 00:19:37 +02:00
|
|
|
"""Permissions for the membership app."""
|
|
|
|
|
|
2025-01-26 12:44:10 +00:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
2023-01-02 23:06:00 +01:00
|
|
|
from dataclasses import dataclass
|
|
|
|
|
|
|
|
|
|
from django.contrib.auth.models import Permission as DjangoPermission
|
|
|
|
|
from django.contrib.contenttypes.models import ContentType
|
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
|
|
|
|
|
|
PERMISSIONS = []
|
|
|
|
|
|
|
|
|
|
|
2025-01-26 12:44:10 +00:00
|
|
|
def persist_permissions(*args, **kwargs) -> None: # type: ignore[no-untyped-def] # noqa: ANN002, ANN003
|
2024-07-15 00:19:37 +02:00
|
|
|
"""Persist all permissions."""
|
2023-01-02 23:06:00 +01:00
|
|
|
for permission in PERMISSIONS:
|
|
|
|
|
permission.persist_permission()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
class Permission:
|
2024-07-15 00:19:37 +02:00
|
|
|
"""Dataclass to define a permission."""
|
|
|
|
|
|
2023-01-02 23:06:00 +01:00
|
|
|
name: str
|
|
|
|
|
codename: str
|
|
|
|
|
app_label: str
|
|
|
|
|
model: str
|
|
|
|
|
|
2025-01-26 12:44:10 +00:00
|
|
|
def __post_init__(self, *args, **kwargs) -> None: # noqa: ANN002, ANN003
|
2024-07-15 00:19:37 +02:00
|
|
|
"""Post init method."""
|
2023-01-02 23:06:00 +01:00
|
|
|
PERMISSIONS.append(self)
|
|
|
|
|
|
|
|
|
|
@property
|
2024-02-29 21:30:11 +01:00
|
|
|
def path(self) -> str:
|
2024-07-15 00:19:37 +02:00
|
|
|
"""Return the path of the permission."""
|
2023-01-02 23:06:00 +01:00
|
|
|
return f"{self.app_label}.{self.codename}"
|
|
|
|
|
|
2024-02-29 21:30:11 +01:00
|
|
|
def persist_permission(self) -> None:
|
2024-07-15 00:19:37 +02:00
|
|
|
"""Persist the permission."""
|
2023-01-02 23:06:00 +01:00
|
|
|
content_type, _ = ContentType.objects.get_or_create(
|
2023-01-11 21:55:58 +01:00
|
|
|
app_label=self.app_label,
|
|
|
|
|
model=self.model,
|
2023-01-02 23:06:00 +01:00
|
|
|
)
|
|
|
|
|
DjangoPermission.objects.get_or_create(
|
|
|
|
|
content_type=content_type,
|
|
|
|
|
codename=self.codename,
|
|
|
|
|
defaults={"name": self.name},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2023-01-03 17:00:07 +01:00
|
|
|
ADMINISTRATE_MEMBERS = Permission(
|
|
|
|
|
name=_("Can administrate members"),
|
|
|
|
|
codename="administrate_members",
|
2023-01-02 23:06:00 +01:00
|
|
|
app_label="membership",
|
|
|
|
|
model="membership",
|
|
|
|
|
)
|