繁体   English   中英

在Django中,如何限制is_staff成员访问URL?

[英]In Django, how do I restrict is_staff member to access a URL?

在我的网络中,用户和管理员用户均从前端登录。 现在,我想做的是某些URL仅由公共用户访问。 Is_staff用户无法访问该URL。 我怎么做?

更新:
我可以使用任何装饰器吗?

您可以简单地继承LoginRequiredMixin并创建您自己的自定义访问混合,如下所示:

class AccessMixin(LoginRequiredMixin):
    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or request.user.is_staff:
            return self.handle_no_permission()
        return super().dispatch(request, *args, **kwargs)

现在,您只需要在视图中继承AccessMixin ,如下所示:

class HomePageView(AccessMixin, TemplateView):
    login_url = <login-url>
    ...
    ...

因此,匿名用户和职员用户将无法访问页面的内容。


您还可以在基本模板html中提及相同的内容

考虑您已经创建了一个扩展content块的base.html ,可以添加如下权限:例如。 base.html

{% if user.is_authenticated %}
    {% if user.is_staff %}
         <h3>Not allowed to access this page</h3>
    {% else %}
         {% block content %} {% endblock %}
    {% endif %}
{% endif %}

这样,当您在模板中扩展base.html时,在{% block content %} {% endblock %}写入的所有内容将仅针对非职员登录用户呈现。

如果要使用装饰器,则可以使用user_passes_test 首先定义一个测试功能,检查用户是否不是职员。

def is_not_staff(user):
    return not user.is_staff

如果您不希望匿名用户能够访问该视图,则也可以更改该函数以检查user.is_authenticated (在Django <= 1.9中为user.is_authenticated()

然后将user_passes_test与您的测试函数一起使用,以装饰您想要保护的视图。

@user_passes_test(is_not_staff)
def non_staff_view(request):
    ... 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM