gpt4 book ai didi

python - Django Admin - 没有为员工获取权限

转载 作者:行者123 更新时间:2023-12-03 20:36:21 32 4
gpt4 key购买 nike

我想我在这里遗漏了一些东西。我有一个 django project (django 1.6, ubuntu box) 里面有几个应用程序,我希望一个用户管理一个特定的应用程序。应该很简单:选择用户,将他/她标记为 is_staff并添加应用程序的权限。但这行不通。

需要注意的是,我使用的是自定义 Authentication Middleware使用我们的 SSO Server 进行身份验证.身份验证工作正常。权限不是。

在我的 settings.py我有:

MIDDLEWARE_CLASSES = (
#[...]
'django.contrib.auth.middleware.AuthenticationMiddleware',
'middlewares.sso.SsoMiddleware', # My Custom Auth Middleware
'django.contrib.auth.backends.ModelBackend',
#[...]
)

无论如何,我的问题是:
  • 当用户第一次访问应用程序时,他/她被添加到User table ;
  • 我去Admin Interface并将该用户标记为 is_staff .他已经被标记为 is_active .
  • 用户现在可以进入Admin Interface .
  • 但是,当我向他添加权限时,他/她仍然收到“无权限”消息。
  • 我的用户有权访问该应用程序的唯一方法是将他标记为 super_user ,但当然他/她可以看到和更改所有应用程序,这不是我的目标。

  • 我有一种感觉,我的定制 Auth Middleware是罪魁祸首,但我不确定也不知道如何解决。

    任何帮助将不胜感激。

    编辑 1:process_request() 代码:

    我的 sso.middleware 上的 process_request() 函数:
    def process_request(self, request):
    if not hasattr(request, 'user'):
    raise ImproperlyConfigured();
    if "BBSSOToken" not in request.COOKIES:
    return self.redireciona_login(request)
    else:
    token = request.COOKIES["BBSSOToken"] #check token on cookies
    if token is not None:
    sso_server = "http://address.to.my.sso.server/sso/identity/attributes"
    try:
    opener = urllib2.build_opener()
    resposta = opener.open("%s?subjectid=%s" % (sso_server, token)).read()
    matricula = self.get_atributo(resposta, "userdetails.attribute.name=uid").upper() #user id
    nome = self.get_atributo(resposta, "userdetails.attribute.name=nm-idgl").upper() #name

    user = authenticate(username=matricula)
    request.user = user
    login(request, user)
    except urllib2.HTTPError, err:
    if err.code == 401:
    return self.redireciona_login(request) #redirects to sso login page
    else:
    raise

    return
    else:
    return self.redireciona_login(request) #redirects to sso login page

    最佳答案

    你的问题是这样的:
    'django.contrib.auth.backends.ModelBackend'不应该在 MIDDLEWARE_CLASSES
    ...它应该在 AUTHENTICATION_BACKENDS反而。

    由于 AUTHENTICATION_BACKENDS 中没有合适的身份验证后端没有识别用户的权限。

    关于python - Django Admin - 没有为员工获取权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24831753/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com