Initial django guardian integrations
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
from django.contrib import admin
|
||||
from guardian.admin import GuardedModelAdmin
|
||||
|
||||
from .models import AccessRequest
|
||||
|
||||
|
||||
@admin.register(AccessRequest)
|
||||
class AccessRequestAdmin(admin.ModelAdmin):
|
||||
class AccessRequestAdmin(GuardedModelAdmin):
|
||||
list_display = (
|
||||
"id",
|
||||
"requester",
|
||||
|
||||
@@ -5,3 +5,7 @@ class AccessConfig(AppConfig):
|
||||
default_auto_field = "django.db.models.BigAutoField"
|
||||
name = "apps.access"
|
||||
verbose_name = "Access Requests"
|
||||
|
||||
def ready(self) -> None:
|
||||
from . import signals # noqa: F401
|
||||
return super().ready()
|
||||
|
||||
23
app/apps/access/signals.py
Normal file
23
app/apps/access/signals.py
Normal file
@@ -0,0 +1,23 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
from guardian.shortcuts import assign_perm
|
||||
|
||||
from apps.core.rbac import assign_default_object_permissions
|
||||
from .models import AccessRequest
|
||||
|
||||
|
||||
@receiver(post_save, sender=AccessRequest)
|
||||
def assign_access_request_perms(sender, instance: AccessRequest, created: bool, **kwargs) -> None:
|
||||
if not created:
|
||||
return
|
||||
if instance.requester_id:
|
||||
user = instance.requester
|
||||
for perm in (
|
||||
"access.view_accessrequest",
|
||||
"access.change_accessrequest",
|
||||
"access.delete_accessrequest",
|
||||
):
|
||||
assign_perm(perm, user, instance)
|
||||
assign_default_object_permissions(instance)
|
||||
Reference in New Issue
Block a user