当前位置: 代码迷 >> python >> 限制django中的用户
  详细解决方案

限制django中的用户

热度:84   发布时间:2023-06-19 09:10:36.0

我有一个面板,可以按管理员或属于管理员的用户来管理帖子。 如何限制面板并将其仅显示给管理员,而不显示给在系统中注册的其他用户。

视图:

class IndexView(LoginRequiredMixin, ListView):
    model = Post
    template_name = 'panel/index.html'

    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        context["posts"] = Post.objects.all()
        context["counter"] = self.post_counter(context["posts"])
        return context

    def post_counter(self, posts):
        postNumber = 0
        for post in posts:
            postNumber +=1

        return postNumber

您可以创建视图的mixin,要求用户是管理员:

class AdminRequiredMixin:
    @method_decorator(login_required)
    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_staff:
            return redirect(WHERE_YOU_WANT)
        return super().dispatch(request, *args, **kwargs)

由于您拥有CBV,因此可以使用PermissionMixin,然后指定权限。 像这样的东西:

from django.contrib.auth.mixins import PermissionRequiredMixin

class MyView(PermissionRequiredMixin, View):
   permission_required = ("is_staff", "is_superuser", )
   ....

参考: :

如果您将具有基于函数的视图,则可以使用@staff_member_required

像这样的东西:

from django.contrib.admin.views.decorators import staff_member_required

@staff_member_required
def my_view(request):
   ...

参考和进一步阅读: :

在模板中,您可以通过直接检查用户来做到这一点

{% if user.is_superuser %}
    <p>I'm an admin.</p>
{% else %}
    <p>I'm an user.</p>
{% endif %}