【问题标题】:How can I restrict access to a view to only super users in Django如何将视图的访问权限限制为仅 Django 中的超级用户
【发布时间】:2019-10-03 10:19:22
【问题描述】:

在我使用 Django 开发的网站上,我想限制对视图的访问,以便只有超级用户可以访问它们。我可以使用@login_requiredLoginRequiredMixin,但是我已经有一个普通人的登录系统,这样任何登录的用户都可以访问该视图。

我尝试了一些我认为可以将 SuperUserRequired 用作 mixin 的方法,但这显然不起作用。

这必须能够在 CBV 中工作,因为这就是我用于此视图的内容。 这是我要应用此限制的相关视图。

class CreatePostView(LoginRequiredMixin,CreateView):
    redirect_field_name = 'posts/post_detail.html'
    form_class = PostForm
    model = Post
    def form_valid(self,form):
        form.instance.author = self.request.user
        return super().form_valid(form)

感谢您提供的任何帮助:)

【问题讨论】:

  • 您可以添加用户角色并添加检查请求的用户角色是否有权访问此 API。
  • 为什么SuperUserRequired mixin 不起作用?请说明您是如何尝试使用它的。
  • 您应该考虑使用PermissionRequiredMixinyourapp.add_post 权限。这样,您就可以创建具有该权限的普通用户。超级用户仍然可以访问该页面,因为他们拥有所有权限。如果你只是检查user.is_superuser,那么以后很难有更细化的限制。

标签: python django django-views django-permissions


【解决方案1】:

我认为您需要文档中描述的this mixin。基本上,它使您有机会检查用户是否具有正确的访问权限。以下是来自文档的修改代码:

from django.contrib.auth.mixins import UserPassesTestMixin

class MyView(UserPassesTestMixin, View):
    def test_func(self):
        return self.request.user.is_superuser

【讨论】:

  • 请注意,user.is_adminuser.is_superuser 不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
相关资源
最近更新 更多