假设你在 Django 中有这样一个具有一对多关系的实体结构:
- Company
- Division
- Department
- Unit
每个用户都是
Unit
的一部分,因此我通过为具有 Department
、Division
或 Company
权限的用户分配 groups来管理在
Django Admin中创建、编辑和删除实体的权限。例如。 “DepartmentAdmin”、“DivisionAdmin”等。为了确定正确的权限,我只是沿着链上的
Unit
进行操作。够简单的。
现在我必须重构:用户现在可以成为多个
Unit
的成员(也许保留他们的“主要”Unit
)。他们可以拥有任意权利来管理任何其他 Department
、Division
等..
我该如何最好地建模?
我尝试过使用一个新实体
Membership
,这是一种带有有关角色/权限的附加信息的连接表。这是一个好主意吗?我发现这在其他地方创建了很多依赖项,并且确定权限非常复杂。
例如
class Membership(models.Model):
user = models.ForeignKey(User,
on_delete=models.CASCADE, related_name="other_departments")
department = models.ForeignKey(Department,
on_delete=models.CASCADE, related_name="other_members")
position = models.CharField(_("Position"), max_length=32, null=True, blank=True)
或者是否有更好的方法利用 Django 的现有的管理员权限管理功能?你会怎么做?
谢谢!
要对用户可以是多个单位的成员并具有管理不同部门、部门和公司的任意权限的场景进行建模,您可以使用多对多关系以及附加的权限和角色中间模型。这是一种解决方法:
from django.db import models
class Membership(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="memberships")
unit = models.ForeignKey(Unit, on_delete=models.CASCADE, related_name="memberships")
position = models.CharField(_("Position"), max_length=32, null=True, blank=True)
权限模型: 您可以创建一个模型来定义用户在单位内可以拥有的不同权限和角色(例如管理员、经理等)。该模型可用于授予和管理特定权限。
class Permission(models.Model):
name = models.CharField(max_length=50)
description = models.TextField()
class MembershipRole(models.Model):
membership = models.ForeignKey(Membership, on_delete=models.CASCADE)
permission = models.ForeignKey(Permission, on_delete=models.CASCADE)
通过这种结构,您可以:
在您的视图或控制器中,您可以通过查询用户的成员身份和角色来确定用户的权限。您还可以将 Django 的内置权限系统与此模型结合使用,以进一步控制对特定操作和视图的访问。
这种方法应该为您提供灵活性,以处理作为多个单元成员的用户并在每个单元内拥有任意权限,同时还可以更轻松地管理和查询用户权限。