Django user.has_perm返回false

时间:2018-08-17 16:12:19

标签: python django

即使表中肯定有权限,当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 

1 个答案:

答案 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