【问题标题】:How to check current user's permissions from a Group in Django?如何从 Django 中的组中检查当前用户的权限?
【发布时间】:2017-06-23 03:03:39
【问题描述】:

我有一个群组EuropartsBuyer 和名为Product 的模型。

以下代码为 Product 模型添加权限。

class Meta:
        permissions = (
            ("can_add_cost_price", "Can add cost price"),
        )

在我的一个观点中,我有以下代码可以将此权限添加到该组。

europarts_buyer, created = Group.objects.get_or_create(name='EuropartsBuyer')
add_cost_price = Permission.objects.get(codename='can_add_cost_price')
europarts_buyer.permissions.add(add_cost_price)

在 Django Admin 的帮助下,我已将用户添加到组 EuropartsBuyer

当我在另一个视图中使用以下代码时

if request.user.has_perm('can_add_cost_price'):
    do something

结果应该是True,但它显示的是False。因此,if 子句下的代码不会运行。

我已经在 Django shell 中导入了当前登录的用户,当我再次测试权限时它显示为 False。

我在这里做错了什么?

【问题讨论】:

  • 你检查 request.user 是否是 AnonymousUser 实例吗?
  • @ThulasiRam 是的。我必须登录才能访问该特定视图。
  • 我明白了,但是如果您使用 DRF 并删除了身份验证类,尽管您已登录..在请求中用户将是匿名的。因此,您可以在检查权限之前先尝试打印 request.user ,这样您就可以确定了。 @MiniGunnR
  • 我做到了。用户已登录。
  • 我忘记使用应用标签了。现在它正在工作。 if request.user.has_perm('europarts.can_add_cost_price').

标签: django permissions django-users django-permissions


【解决方案1】:

试试这个:

if request.user.has_perm('app_name.can_add_cost_price'):

来自docs

每个权限的格式为“app_label.permission codename”

【讨论】:

    【解决方案2】:

    当您使用权限组时,您不需要检查用户拥有的每个权限。如果用户是您在 Django 管理员中创建的权限组的一部分,只需将“YourGroupName”更改为您在创建组时调用的名称

            {% ifequal user.groups.all.0.name "YourGroupName" %}
              <div>This is User</div>
            {% endifequal %}
    

    【讨论】:

      猜你喜欢
      • 2013-05-04
      • 2011-08-14
      • 1970-01-01
      • 2022-07-02
      • 2020-11-04
      • 2013-12-26
      • 1970-01-01
      • 2014-05-23
      • 2018-06-24
      相关资源
      最近更新 更多