【问题标题】:Django how to restrict staff-user to edit or delete others staff-user post from django admin panelDjango如何限制员工用户从django管理面板编辑或删除其他员工用户帖子
【发布时间】:2021-08-02 20:45:03
【问题描述】:

现在我所有的 django 员工用户都可以编辑或删除其他员工用户的帖子。我希望他们只能从 django 管理面板编辑或删除自己的帖子。如何限制他们编辑或删除其他用户帖子?这是我的代码:

views.py:

 class BlogPublishView(PermissionRequiredMixin,CreateView):
      raise_exception = True
      permission_required = "blog.add_post"
      model = Post
      form_class = BlogPost
      template_name = "blog_post.html"
      #fields = ['title','author','body']
      
      
                   
class BlogUpdateView(PermissionRequiredMixin,UpdateView):
      raise_exception = True
      permission_required = "blog.change_post"
      model = Post
      template_name = "blog_update_post.html"
      form_class = BlogPost
     
     
 class BlogDeleteView(PermissionRequiredMixin,DeleteView):
      raise_exception = True
      permission_required = "blog.delete_post"
      model = Post
      template_name = "delete_blog_post.html"
      success_url = reverse_lazy('blog')

urls.py

path('blog-post', BlogPublishView.as_view(), name='blog-post'),
path('blog-update/<slug:slug>', BlogUpdateView.as_view(), name='blog-update'),
path('blog-delete/<slug:slug>', BlogDeleteView.as_view(), name='blog-delete'),

html

 {% if user.is_authenticated %}{% if user.id == post.author.id %} <a href="{% url 'blog-update' post.slug %}"><b>(Edit Blog)</b></a>&nbsp;<a href="{% url 'blog-delete' post.slug %}"><b>(Delete Blog)</b> </a>{% endif %}{% endif %}

如果你现在还不明白我的问题,让你再解释一下。假设我的 djano 管理面板“A”、“B”和“C”中有三个用户。用户“A”是管理员,用户“B”和“C”是员工用户。用户“B”和“C”只有从管理面板编辑、删除和发布帖子的权限。问题是用户“A”可以编辑和删除用户“B”的帖子,用户“B”也可以编辑或删除用户“A”的帖子。我想限制两个员工用户从 django 管理面板编辑、删除和查看彼此的帖子。他们只能从 django 管理面板查看、编辑和删除自己的帖子。

【问题讨论】:

标签: python django


【解决方案1】:

经过大量研究,我找到了解决方案。在我的 django 管理模型中使用 "get_queryset" 方法后,我解决了问题。这是代码:

def get_queryset(self, request):
        qs = super().get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(author=request.user)  

您可以阅读更多详细信息here. 在应用之前 get_queryset 用户“A”和用户“B”可以从 django 管理面板查看、编辑和删除彼此的帖子。查看用户“A”登录 django 管理面板的图片,他也可以编辑用户“B”和其他成员的帖子。

应用 get_queryset 方法后,我限制用户“A”查看、编辑和删除用户“B”的帖子。现在用户“A”只能查看、编辑和删除他自己的帖子。看图

如果您在管理员模型中应用此 get_queryset 方法,那么除了管理员之外,没有人可以查看、编辑和删除其他用户的帖子。

【讨论】:

    猜你喜欢
    • 2013-04-12
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2019-06-30
    • 1970-01-01
    • 2016-04-08
    • 2018-02-02
    相关资源
    最近更新 更多