【发布时间】:2019-11-18 12:24:08
【问题描述】:
我想使用 Django Rest Framework 为 API 提供多层权限,我怎样才能最好地实现这一点?
具体我拥有的三类授权是:
- 角色:模型级别的访问权限,例如管理员和不同的客户类型。
- GroupAccess:每个对象的组访问权限,例如用户团队。
- 敏感度:每个对象,敏感信息的附加标签。
后两个类别同样适用于所有模型,最好不需要为每个模型提供单独的权限。
想法 1:
为从标准 django auth 组继承的每个类别创建一个模型。将这些作为代理组执行,在我的代码中逻辑上有所不同,但尽可能与标准授权一致。然后使用 django-guardian 开启对象级权限。
想法 2:
对角色使用标准组,并根据这些组分配模型级别的权限。对于对象级权限,在 Django Rest Framework 中编写一个自定义权限类来检查用户的对象级权限。
【问题讨论】:
-
我在我的大学项目中使用了想法 2,它运行良好。在我的案例中,有 3 种不同类型的用户,管理员,我使用了 Django 已经在用户模型中提供的标准管理员字段,医生模型和专业模型,医生和专业人士都在不同的组中,并且他们有对象权限, 没有人可以删除一些受保护的模型,只有Admin用户可以删除,Professional不能编辑对象,只能创建和可视化(Get)。
标签: django django-rest-framework django-permissions