为对象级权限构建简单的解决方案

时间:2020-01-03 01:03:21

标签: django django-permissions django-guardian

请考虑以下模型:

class Administrator(AbstractBaseUser, PermissionsMixin):
    etc

class Issuer(models.Model):
    lists = models.ManyToManyField(List, etc)

class List(models.Model):
    issuer = models.ForeignKey(Issuer, etc)

class Member(models.Model):
    lists = models.ManyToManyField(List, etc)
    issuer = models.ForeignKey(Issuer, etc)

在此应用中:

  • 每个List都属于Issuer
  • 每个Member都属于Issuer
  • 每个List具有一个或多个MembersMembers可以位于一个或多个Lists
  • 每个Issuer可以有一个或多个AdministratorsAdministrators可以有一个或多个Issuers
  • Administrators是使用contrib.auth
  • 的自定义用户模型

问题1

我希望只允许Administrators创建/查看/编辑ListsMembers,它们与之共享相同的Issuer。我怎样才能做到这一点?我认为最简单的方法是在渲染每个视图时查询用户会话?

问题2

我希望Administrators能够在他们有权访问的Issuers之间进行切换,以便在他们创建/查看列表或成员时自动保存Issuer。想象一下导航栏中的“发行人1,发行人2,发行人3等”中的选择字段。

最简单的方法是什么?通过URL传递issuer.pk来呈现每个视图并使用对Q1的权限,还是有一种更干净的方法?我是否需要像django-guardian这样的更复杂的对象级权限?

0 个答案:

没有答案