代码之家  ›  专栏  ›  技术社区  ›  arheops

Django公司user.has\烫发返回false

  •  0
  • arheops  · 技术社区  · 6 年前

    我遇到了一些奇怪的问题user.has\烫发始终返回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 回复  |  直到 6 年前
        1
  •  1
  •   Community pid    4 年前

    传递给has\u perm的字符串的格式应为 "<app_label>.<permission.codename>" . 即: u.has_perm('sessions.not_show_tos')

    来自django文档:

    有perm(perm,obj=None)

    如果用户具有指定的权限,则返回True,其中perm的格式为 “<应用程序标签><权限。代号>" . (请参阅有关权限的文档)。如果用户处于非活动状态,此方法将始终返回False。

    如果传入obj,这个方法不会检查模型的权限,而是检查这个特定对象的权限。

    https://docs.djangoproject.com/en/2.2/ref/contrib/auth/#django.contrib.auth.models.User.has_perm