如何在 django 中从组创建自定义组

Posted

技术标签:

【中文标题】如何在 django 中从组创建自定义组【英文标题】:How to create custom groups in django from group 【发布时间】:2016-11-17 11:15:24 【问题描述】:

我试图弄清楚如何在 Django 中创建自定义组,使组与应用程序相关,而不是与项目相关。

例如当一个用户要创建一个公司时,它应该是该公司的所有者:

型号

class Company(models.Model):
    owner = models.ForeignKey(User)
    name = models.CharField(max_length=64, unique=True)
    description = models.TextField(max_length=512)
    created_on = models.DateTimeField(auto_now_add=timezone.now)

    class Meta:
        permissions = (
            ("erp_view_company", "Can see the company information"),
            ("erp_edit_company", "Can edit the company information"),
            ("erp_delete_company", "Can delete the company"),
        )

查看

# Create your views here.
def register(request, template_name='erp/register.html'):
    if request.method == 'POST':
        company_form = CompanyRegistrationForm(request.POST)
        if company_form.is_valid():
            # Create a new company object but avoid saving it yet
            new_company = company_form.save(commit=False)
            # Set the owner
            if request.user.is_authenticated():
                new_company.owner = request.user

            # Add the user to group admin
            group = Group.objects.get_or_create(name="erp_admin")
            request.user.groups.add(group)

            # Save the User object
            new_company.save()

            template_name = 'erp/register_done.html'
            return render(request, template_name, 'new_company': new_company)

    else:
        company_form = CompanyRegistrationForm()

    return render(request, template_name, 'company_form': company_form)

这里的问题:

1) 我想要 CompanyGroup.objects.get_or_create(name="admin") 而不是 Group.objects.get_or_create(name="erp_admin"),因为应用程序的组仅限于应用程序。

2) 如何将每个模型的 Meta 类中定义的权限映射到一个组?

3) 自定义组与公司相关,这意味着每个公司都有管理员组,该组以所有者开头。所有者可以创建像“经理”这样的用户。管理员可以创建组/权限、添加用户、为用户设置权限,但无论如何不能对管理员组进行 CRUD。所以组中有一种层次结构(我认为层次结构取决于添加到组中的权限)。

为了更清楚,您可以在此处查看该概念的图片:

所以我认为主要的问题是:

1) 如何继承 Groups 来创建自定义组。

2) 如何将模型的权限映射到组。

3) 如何将群组限制为 CompanyID。

我希望问题得到明确定义。如果我需要澄清一些事情,请告诉我。

提前感谢您的支持。

编辑 1)

对于第 3 点,我在 SO: Extend django Groups and Permissions 上找到了这个答案,但问题是如何查询这些数据以及如何检查权限。您如何覆盖 save() 方法以将元信息添加到属性“名称”?组名可能类似于:“company_id#admin”或“company_id#manager”。

【问题讨论】:

【参考方案1】:

您可能正在寻找每个对象的权限。 Django 不支持开箱即用,但可以通过应用程序 Django-guardian 来实现

【讨论】:

以上是关于如何在 django 中从组创建自定义组的主要内容,如果未能解决你的问题,请参考以下文章

xml Miva - 从组中加载所有自定义字段

如何在 Grafana 中从 Netdata 自定义标签

Xcode:如何在 UIScrollView 中从 XIB 文件添加自定义视图

如何使用 JS 或 jQuery 从组复选框名称数组中检索引用

如何在 Django 中从 2 个不同的模型对象创建表单对象?

如何在 Django 中测试自定义模板标签?