无法在Django中设置自定义权限

时间:2010-08-22 02:12:15

标签: python django permissions

我正在尝试为Django应用程序设置一些自定义权限,但似乎无法使其正常工作。官方文档有点不足,并没有提及(至少我能找到)如何实际设置权限?根据我发现的一些第三方教程,我扩展了User类,它似乎工作正常:

from django.db import models
from django.contrib.auth.models import User,UserManager

    class CustomUser(User):
        custom_field = models.CharField(max_length=250)
        objects = UserManager()

        class Meta:
            permissions = (
                ('is_custom','Has a Custom Permission'),
            )

但是当我尝试设置权限时,它不起作用:

>>> from project.custauth.models import CustomUser
>>> from django.contrib.auth.models import User, Permission
>>> user = CustomUser.objects.get(username='new.user')
>>> user
<CustomUser: new.user>
>>> custom_permission = Permission.objects.get(codename="is_custom")
>>> custom_permission
<Permission: custauth | custom user | Has a Custom Permission>
>>> custom_permission.save()
>>> user.user_permissions.add(custom_permission)
>>> user.save()
>>> user.has_perm(custom_permission)
False
>>> user.get_all_permissions()
set([])

关于我做错的任何想法?我正在使用Django 1.2.1和Python 2.4.3。所有的意见都赞赏......

2 个答案:

答案 0 :(得分:1)

我测试了你的代码(Python 2.6.2,Django 1.2.1),一切都按预期工作。你能写一个单元测试来练习相同的代码片段吗?

旁注user.has_perm(custom_permission)不会返回True。试试user.has_perm('app.is_custom')

<强>更新

代码段如下:

In [1]: from app.models import CustomUser

In [2]: from django.contrib.auth.models import User, Permission

In [3]: user = CustomUser.objects.get(username = 'new.user')

In [4]: custom_permission = Permission.objects.get(codename='is_custom')

In [5]: user.user_permissions.add(custom_permission)

In [6]: user.save()

In [7]: user.has_perm(custom_permission)
Out[7]: False

In [8]: user.has_perm('app.is_custom')
Out[8]: True

In [9]: user.get_all_permissions()
Out[9]: set([u'app.is_custom'])

答案 1 :(得分:0)

我在不同的平台上做了一些测试,并且能够复制你的结果。经过多次挖掘后,我发现它是身份验证后端的问题,而不是权限本身。

感谢您的帮助Manoj。