Django模型和权限限制

dco*_*bus 4 python django python-3.x

楷模:

Company

Product

我们有一家母公司(所有者的所有者),他们可以创建任何Company和任何Product子公司或子产品.

现在,我想要完成的是限制哪家公司可以CRUD其他公司和产品.

这是场景:

公司及子公司(分包商):

Master (creates) -> Company “A”
Master (creates) -> Company “B” (creates) -> Company “C”
Master (creates) -> Company “D” (creates) -> Company “F” (creates) -> Company “G”
Run Code Online (Sandbox Code Playgroud)

公司和产品分配:

Master (Add Product) -> Show all products
Master (assign products to top levels) -> Company “A”, Company “B” and Company ”D”
Run Code Online (Sandbox Code Playgroud)

子公司产品分配(管理):

Company “B” (assign products only to sub-level) -> Company “C”
Company “D” (assign products only to sub-level) -> Company “F”
Company “F” (assign products only to sub-level) -> Company “G”
Run Code Online (Sandbox Code Playgroud)

但是,如果Company D从子级别删除产品,则也会以递归方式从所有子级别产品中删除.

有没有确定的方法可以用Django核心这样做,或者可能有一个推荐的库,我找不到?我也在Django文档中看到了参考Model Meta optionsOptions.permissions方法......但我不确定这也是我需要的.

Som*_*Foo 5

我建议你最好的包是DJANGO GUARDIAN.但你真正在寻找什么Role Based Access Control Logic.

不幸的是,django-guardian不支持角色.相关问题.所以我建议你为此写自己的观点.但您可以查看以下这些包:


dco*_*bus 1

class Company(models.Model)
    parent = models.ForeignKey('self', blank=True, null=True, related_name='children')


Company.objects.get(pk=1).children.all()
Run Code Online (Sandbox Code Playgroud)

其余的逻辑我可以通过控制Views