![](/img/trans.png)
[英]Django custom permissions unable to call in decorator as i passed in params
[英]Unable to set custom permissions in Django
我正在嘗試為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。 所有投入贊賞......
我測試了你的代碼(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'])
我在不同的平台上做了一些測試,並且能夠復制你的結果。 經過更多的挖掘后,我發現它是身份驗證后端的問題,而不是權限本身。
感謝您的幫助Manoj。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.