【问题标题】:Django Admin: Restrict staff to updateDjango Admin:限制员工更新
【发布时间】:2019-06-22 17:16:25
【问题描述】:

我有一个Blog Model。所有新博文的状态均为DRAFT

在管理页面中,admin 将是 Blog Model 的所有权限 (CRUD)。我可以通过使用 Django 的register 方法来解决这个问题。

我想要的是is_staff 用户可以查看所有Blog Post 但不能更新状态(例如从DRAFTAPPROVE)。

有没有办法检查request的组,然后允许用户更新?谢谢。

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    最简单的解决方案是在管理类中将status字段标记为只读,通过设置readonly_fields:

    
    from django.contrib import admin
    from .models import BlogPost
    
    @admin.register(BlogPost):
    class BlogPostAdmin(admin.ModelAdmin):
        readonly_fields = ('status',)
    

    请注意,这会使所有管理员用户的status 只读。如果您需要基于当前用户进行更细粒度的控制,可以覆盖 get_readonly_fields 方法。

    此外,由于 Django Admin 的所有用户都有is_staff,我们将明确检查built-in permission to change a BlogPost

    class BlogPostAdmin(admin.ModelAdmin):
        def get_readonly_fields(self, request, obj=None):
            # obj is None if we're creating a new BlogPost, or a BlogPost instance
            # if we are editing an existing BlogPost
            if not request.user.has_perm("your_app.change_blogpost"):
                return ("status",)
            return []
    

    【讨论】:

    • 感谢您的快速回复!我要试试你的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    相关资源
    最近更新 更多