【问题标题】:adding custom permission through django-admin, while server is running在服务器运行时通过 django-admin 添加自定义权限
【发布时间】:2015-11-27 20:54:20
【问题描述】:

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

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

在模型类的 Meta 子类中使用权限将通过 migrate 脚本创建自定义权限。 取自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"),
        )

这将在auth_permission(和django_content_type)上插入值 但这需要数据库迁移,这意味着不太可能由用户(管理员)完成,而是由开发人员完成。而且我认为应用程序必须能够在服务器运行时管理权限、创建、编辑、删除。

那么使用 Django 实现此功能的最佳实践是什么?我是否应该在每个模型中继续使用迁移并创建它们并在每次我们实现新权限或功能时重新加载服务器?谢谢你

【问题讨论】:

    标签: python django permissions django-admin


    【解决方案1】:

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

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

    代码可以在它执行的任何地方,但您的应用程序的admin.py 可以是一个直观的位置来粘贴它。之后,您将能够查看、编辑和删除权限。

    【讨论】:

      【解决方案2】:

      你还需要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')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-18
        • 1970-01-01
        • 2010-12-17
        • 2013-02-27
        • 2013-09-09
        • 2016-09-18
        • 1970-01-01
        相关资源
        最近更新 更多