DRF:创建自定义权限类

时间:2020-01-31 09:44:52

标签: django django-rest-framework rbac

我为Django应用设计了自己的CustomerServiceImpl.getDetails。与最初的Django基于角色的仅使用RBAC systempermissionscontent_typesgroups表的情况不同,我设计了我的模型,使其包含用于定义的{{1 }}(即users),operations(即read, write, print),objectsPost, Events, Documents)和必要的关系,即我自己的权限表roles和匹配的Writer Level 1, Events Manager(即object reference)中。

我现在的问题是我不太确定如何在operation reference中实现它。当我使用Post | add且有人向DRF模型/表发送“ POST”请求时,我们都知道Django将检查用户是否具有permission_class = (DjangoObjectPermissions,)权限。我也想这样做,但是我希望Django引用我的RBAC模型/表。

我想在Post中编写自己的权限类,但可能需要一些有关如何实现此权限的提示。

我已经读过create custom permissions,但是我不确定是否也可以使用它来执行自己的RBAC表。

2 个答案:

答案 0 :(得分:1)

根据DRF Permissions doc

DjangoModelPermissions 一样,此权限仅适用于具有 .queryset 属性或 {{1} } 方法。仅当用户通过身份验证并分配了相关的每个对象权限和相关的模型权限后,才会授予授权。

因此,您应该在视图类中定义 .get_queryset() 属性或 queryset 方法。

示例:

get_queryset(...)

可以通过Django's Admin site as well as Django shell

控制对用户或组的权限

答案 1 :(得分:0)

好吧,在检查rest_frameworks'permissions.py之后,我认为我可以这样执行我自己的权限类行为:

  1. 创建一个自定义权限类,该类继承rest_framework.permissions.BasePermission
  2. 覆盖has_object_permission()方法
  3. 在该方法的内部,编写一个逻辑,将请求用户映射到我的自定义RBAC模型中,以检查他是否已获得适当的权限
  4. 返回适当的布尔值