django支持多个管理实例并锁定对特定实例的访问

django支持多个管理实例并锁定对特定实例的访问,django,admin,authentication,Django,Admin,Authentication,我有几个管理实例在一个网站上运行-每个国家一个,该网站支持 但是,如果用户登录到一个管理员,他们就可以自动访问其他实例 我需要让身份验证代码知道用户登录了哪个管理员,并阻止访问其他管理员系统 您知道如何做到这一点吗?您可以使用它来检查用户访问管理站点某些区域的权限。看看这个。(您可能想了解更多有关处理的信息。) 如果您需要更通用的东西,可以使用下面的代码示例。想法很简单:它使用自定义函数查找用户权限并给出适当的响应: #coding: utf-8 # Note that RESTRICTED_U

我有几个管理实例在一个网站上运行-每个国家一个,该网站支持

但是,如果用户登录到一个管理员,他们就可以自动访问其他实例

我需要让身份验证代码知道用户登录了哪个管理员,并阻止访问其他管理员系统

您知道如何做到这一点吗?

您可以使用它来检查用户访问管理站点某些区域的权限。看看这个。(您可能想了解更多有关处理的信息。)

如果您需要更通用的东西,可以使用下面的代码示例。想法很简单:它使用自定义函数查找用户权限并给出适当的响应:

#coding: utf-8
# Note that RESTRICTED_URLS tuple takes three parameters: url regex, function to check
# whether user has certain permission, and a function to redirect the user to a certain 
# page if he doesn't have sufficient rights.
import re
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from django.http import HttpResponseRedirect
from django.contrib import messages
from backend.models import Professional
from django.contrib.auth.decorators import permission_required

def calculate_forbidden_response(request, view_func,view_args,view_kwargs):
    if not request.user.is_authenticated():
        return permission_required('')(view_func)(request,*view_args,**view_kwargs)
    elif request.user.has_perm('backend.p_add_professional'):
        messages.error(request, _('You need permission Spam to enter this cabinet.'))
        return HttpResponseRedirect('/some_help_page_about_permissions.html')

def check_professional_permission(request):
    return request.user.has_perm('backend.p_access_professional_cabinet')

RESTRICTED_URLS = (
                    (r'/professional/(.*)$', check_professional_permission, calculate_forbidden_response),
                  )
RESTRICTED_URLS_EXCEPTIONS = ()

class CheckPermissionMiddleware(object):
    def __init__(self):
        self.restricted = tuple([(re.compile(url[0]), url[1], url[2]) for url in RESTRICTED_URLS])
        self.exceptions = tuple([re.compile(url) for url in RESTRICTED_URLS_EXCEPTIONS])

    def process_view(self,request,view_func,view_args,view_kwargs):
        if request.user.is_superuser:
            return None
        for path in self.exceptions:
            if path.match(request.path): return None
        for rule in self.restricted:
            url, permission = rule[0], rule[1]
            calculated_response = rule[2]
            if url.match(request.path):
                if not permission(request):
                    return calculated_response(request, view_func,view_args,view_kwargs)
                else:
                    return None
        return None