1

我目前遇到一个使用 django 1.3.1 的项目的问题,它是管理界面(只是你友好的邻居 django.contrib.admin)。该项目已经进行了一段时间,唯一具有员工身份的帐户一直是超级用户帐户。

这已经改变了。客户请求具有更精细权限设置的帐户。我尝试通过禁用指定帐户的超级用户状态并手动设置适当的权限来进行设置。当用户登录时,管理界面似乎完全忽略了手动指定的权限。即使指定了所有权限,用户也被拒绝访问任何内容(尽管他仍然可以登录到管理界面)。

这个问题似乎与 django 版本无关,因为我尝试快速临时升级到 1.3.3 甚至 1.4。没运气...

我可以分享一些项目代码来帮助追踪问题,但坦率地说,我不知道可能是什么问题。我将不胜感激一些指示。

4

2 回答 2

1

您是否使用自己的身份验证后端?如果是这样,您的后端类是否派生自 django.contrib.auth.backends.ModelBackend?

我今天在我的代码中发现了同样的问题,问题原来是我的后端是从对象派生的。特别是,我的后端没有实现管理代码使用的一些功能(例如 has_module_perms)。

要么从 django.contrib.auth.backends.ModelBackend 派生你的后端,要么确保管理代码所需的所有功能都在你的后端中定义。

于 2012-09-26T02:08:33.123 回答
1

这是根据上面 yassam 的回答解决此问题的示例。我有导致问题的代码:

class MyCustomModelBackend(object):

    def authenticate(self, username=None, password=None):
        try:
            user = User.objects.get(username__iexact=username)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            return None

要解决此问题,请将其更新为派生自django.contrib.auth.backends.ModelBackend

from django.contrib.auth.backends import ModelBackend

class MyCustomModelBackend(ModelBackend):

    def authenticate(self, username=None, password=None):
        try:
            user = User.objects.get(username__iexact=username)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            return None
于 2013-10-01T21:07:54.190 回答