【问题标题】:Django - How to add multiple permissions on group?Django - 如何在组上添加多个权限?
【发布时间】:2022-11-07 22:42:26
【问题描述】:

我有一个权限列表

list = ['view', 'add', 'edit']

列表中的权限已经保存在我的桌子上。

我先清除组之前的权限,以便插入一个新权限

group = Group.objects.get(name='Group1')
group.permissions.clear()

有没有办法以编程方式将权限列表添加到 Group1?

【问题讨论】:

  • 我希望必须有一些 ContentType 与每个权限相关联。
  • 试试这个group.permissions.set(list)
  • @JPG 列表上的所有权限都是代号
  • @AnkitTiwari 我已经尝试过了,但它返回错误 ValueError: invalid literal for int() with base 10
  • 如果您可以只拥有一个目的是执行列表、查看和添加之一的组,那不是更好吗?对于这种情况,它看起来像一个“操作员”角色(或组)。在您看来,您可以使用request.user.group 进行验证。此外,您可以编写权限类以进一步增强功能。

标签: python django django-authentication


【解决方案1】:

假设您有一个名为 blog 的应用程序和一个名为 BlogPost 的模型,并且想要将该模型的权限 viewchangeadd 添加到名为 Blogger 的组中,您应该能够:

from django.contrib.auth.models import Group, Permission

codenames = ['view_blogpost', 'change_blogpost', 'add_blogpost']

group = Group.objects.filter(name='Blogger').first()
permissions = Permission.objects.filter(content_type__app_label='blog', codename__in=codenames)
for permission in permissions.all():
    group.permissions.add(permission)

注意:检查app_label 可能不是必需的,但它可以确保您不会从另一个应用程序中为模型BlogPost 添加权限(如果存在)。

查看数据库中的表auth_permissiondjango_content_type 中的字段和可能的值。

【讨论】:

    猜你喜欢
    • 2017-03-20
    • 2019-04-18
    • 2021-06-19
    • 2020-08-06
    • 2020-01-21
    • 2019-11-18
    • 2016-12-13
    • 1970-01-01
    • 2014-06-18
    相关资源
    最近更新 更多