adding custom permission through django-admin, while server is running

12,123

Solution 1

You can register the Permission model to admin view:

from django.contrib.auth.models import Permission
from django.contrib import admin
admin.site.register(Permission)

The code can be anywhere where it gets executed, but admin.py of your application could be an intuitive place to stick it in. After this, you will be able to view, edit and remove the permissions.

Solution 2

You also need to select_related because it will result in a bunch of SQL queries

from django.contrib import admin
from django.contrib.auth.models import Permission


@admin.register(Permission)
class PermissionAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        return qs.select_related('content_type')
Share:
12,123
izzulmakin
Author by

izzulmakin

Total IoT: Electronics to Embedded System to Linux & Windows GUI APP to Backend & frontend Website

Updated on June 07, 2022

Comments

  • izzulmakin
    izzulmakin almost 2 years

    In Django-admin, Is it possible to make feature so that admin can create/edit/delete certain permission through django-admin while the server is running?

    In django-admin I want the permission can be listed, with edit create and delete feature

    Using permission in Meta subclass of models class will create custom permission through migrate script. taken from https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#custom-permissions

    class Task(models.Model):
    ...
        class Meta:
            permissions = (
                ("view_task", "Can see available tasks"),
                ("change_task_status", "Can change the status of tasks"),
                ("close_task", "Can remove a task by setting its status as closed"),
            )
    

    This will insert values on auth_permission (and django_content_type) But that requires database migrations, which means unlikely be done by user (Admin) but by the developer instead. And I believe it is necessary for application to be able to manage permission, creating, editing, deleting while the server is running.

    So what is the best practice to make this functionality with Django? Should I keep using migrate & create them all in each model and to reload server everytime we implement new permission or feature in general? thankyou