python-3.x Django中用于特定路由的自定义身份验证中间件

aor9mmx1  于 2023-10-21  发布在  Python
关注(0)|答案(2)|浏览(137)

我为我的Django项目实现了一个自定义身份验证设置。用户有一些用户角色。现在,我想确保某些特定的路由可能只适用于特定的用户角色。假设edit/uploaded-files仅适用于role = 1的用户。所以我为此创建了一个中间件。

from django.shortcuts import redirect

class HRMiddleware(object):
    def process_request(self, request):
        user = request.user
        if not (user and user.is_authenticated() and user.email):
            return redirect('')
        if user.role_id.id != 1:
            raise 403
        return None

现在,我如何将此中间件应用于某些特定的路由?我找到了一些解决方案,比如使用装饰器@decorator_from_middleware(MyMiddleware)和在中间件中指定路由。有没有更好的办法呢?我是一个Laravel开发者。这是我的第一个Django项目。在laravel中,我们可以指定路由中的中间件。请帮我

juud5qan

juud5qan1#

试试这个:

URLS = ['/some_path/']

class HRMiddleware(object):
    def process_request(self, request):
        user = request.user
        if not (user and user.is_authenticated() and user.email) and request.path in URLS:
            return redirect('')
        if user.role_id.id != 1:
            raise 403
        return None
myzjeezk

myzjeezk2#

我觉得这样更好

from django.http import Http404
    URLS = ['/dashboard/']
    
    class HRMiddleware:
        def __init__(self, get_response):
            self.get_response = get_response
        def __call__(self, request):
            user = request.user
            response = self.get_response(request)
            if not (user and user.is_authenticated and user.email) and request.path in URLS:
 return redirect('')
    if user.role_id.id != 1:
                raise Http404
            return response

相关问题