涉及非超级用户帐户的django管理员权限的问题

时间:2012-09-24 15:33:54

标签: django admin rights root

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

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

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

我分享一些项目代码以帮助追踪问题没有问题,但坦率地说,我无法弄清楚问题可能是什么。我非常感谢一些指示。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

以下是基于亚萨姆上述答案解决此问题的示例。我遇到的代码导致了问题:

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