无法在Django中设置自定义权限
我正在尝试为一个Django应用程序设置一些自定义权限,但似乎总是搞不定。官方文档有点简略,至少我找不到关于如何实际设置权限的说明。根据我找到的一些第三方教程,我扩展了用户类,似乎还不错:
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
我在另一个平台上做了一些测试,发现可以重现你的结果。经过进一步的调查,我发现问题出在认证后台,而不是权限本身。
谢谢你的帮助,Manoj。
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'])