在服务器运行时通过django-admin添加自定义权限

izz*_*kin 5 python django permissions django-admin

在Django-admin中,是否可以制作功能,以便管理员可以在服务器运行时通过django-admin创建/编辑/删除某些权限?

在django-admin中我希望可以列出权限,具有编辑创建和删除功能

使用模型类的Meta子类中的权限将通过迁移脚本创建自定义权限.摘自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"),
        )
Run Code Online (Sandbox Code Playgroud)

这将在auth_permission(和django_content_type)上插入值但是这需要数据库迁移,这意味着不太可能由用户(管理员)而是开发人员完成.应用程序是否有必要在服务器运行时管理权限,创建,编辑和删除?我想知道人们如何让它在django上运作.

那么创建此功能的最佳做法是什么?或者我应该坚持使用迁移并在每个模型中创建它们,因为我们需要在每次实现新功能时重新加载服务器的python web框架行为如何?谢谢

Juu*_*nen 9

您可以将Permission模型注册到管理视图:

from django.contrib.auth.models import Permission
from django.contrib import admin
admin.site.register(Permission)
Run Code Online (Sandbox Code Playgroud)

代码可以在任何地方执行,但是admin.py您的应用程序可以是一个直观的地方,以便坚持下去.之后,您将能够查看,编辑和删除权限.


Art*_*kyi 5

您还需要这样做,select_related因为它会导致一堆 SQL 查询

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')
Run Code Online (Sandbox Code Playgroud)