簡體   English   中英

無法在Django中設置自定義權限

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM