即使表中肯定有权限,当user.has_perm始终返回true时,我遇到了一个奇怪的问题。 也许以前有人这样吗? 只能在最新版本中发出问题的接缝
测试节目问题如下:
import django
import datetime
django.setup()
from django.contrib.auth.models import User
u=User.objects.get(pk=177)
print("version %s" % str(django.VERSION))
print("1: %s" %str(u.has_perm('not_show_tos')))
from django.contrib.auth.models import Permission
permissions = Permission.objects.filter(user=u)
sorted_list_of_permissions = sorted(list(permissions))
print("2:%s " % str("not_show_tos" in sorted_list_of_permissions));
for i in sorted_list_of_permissions:
print( str(i.codename))
print("%s" %str(u.has_perm(i.codename)))
print("\n")
p=Permission.objects.get(codename='not_show_tos');
print("4 %s " % str(p))
print("5 %s " % str(p in sorted_list_of_permissions))
print("6 %s " % str(u.has_perm(p)))
测试结果
python3 /tmp/test.py
signals init done.
version (2, 0, 6, 'final', 0)
1: False
2:False
not_show_tos
False
4 sessions | session | Not Show Tos Page
5 True
6 False
答案 0 :(得分:0)
您传递给has_perm的字符串的格式应为"<app_label>.<permission.codename>"
。即:u.has_perm('sessions.not_show_tos')
从Django文档中:
has_perm(perm,obj = None)
如果用户具有指定的许可权,则返回True,其中perm的格式为
"<app_label>.<permission.codename>"
。 (请参阅权限文档)。如果用户不活动,则此方法将始终返回False。如果传入obj,则此方法将不检查模型的权限,而是检查此特定对象的权限。
https://docs.djangoproject.com/en/2.2/ref/contrib/auth/#django.contrib.auth.models.User.has_perm