Django DRF:创建自定义权限类

Django DRF:创建自定义权限类,django,django-rest-framework,rbac,Django,Django Rest Framework,Rbac,我已经为我的Django应用程序设计了自己的RBAC系统。与Django最初的基于角色的表不同,Django的基于角色的表只使用权限、内容类型、组和用户表,我设计了mine,以便它包含一个定义操作的模型,即读、写、打印、对象(即Post)、事件、文档、角色编写器级别1、,事件管理器和必要的关系,即接受对象引用和匹配操作引用(即Post | add)的我自己的权限表 我现在的问题是我不太确定如何在DRF中实现这一点。当我使用permission_class=DjangoObjectPermissi

我已经为我的Django应用程序设计了自己的RBAC系统。与Django最初的基于角色的表不同,Django的基于角色的表只使用权限、内容类型、组和用户表,我设计了mine,以便它包含一个定义操作的模型,即读、写、打印、对象(即Post)、事件、文档、角色编写器级别1、,事件管理器和必要的关系,即接受对象引用和匹配操作引用(即Post | add)的我自己的权限表

我现在的问题是我不太确定如何在DRF中实现这一点。当我使用permission_class=DjangoObjectPermissions,并且有人向POST模型/表发送“POST”请求时,我们都知道Django将检查用户是否具有可以添加POST权限。我也想这样做,但我希望Django参考我的RBAC模型/表

我想在my permissions.py中编写自己的权限类,但可能需要一些关于如何实现的提示

我已经读到你可以,但我不确定这是否也意味着你可以用它强制你自己的RBAC表。

根据

与DjangoModelPermissions一样,此权限只能应用于具有.queryset属性或.get_queryset方法的视图。仅当用户经过身份验证且已分配相关的每对象权限和相关模型权限时,才会授予授权

因此,您应该定义queryset属性或get_queryset。。。方法。 例如:

用户或组的权限可以根据

与DjangoModelPermissions一样,此权限只能应用于具有.queryset属性或.get_queryset方法的视图。仅当用户经过身份验证且已分配相关的每对象权限和相关模型权限时,才会授予授权

因此,您应该定义queryset属性或get_queryset。。。方法。 例如:

用户或组的权限可以通过

控制好了,在检查rest\u frameworks的permissions.py之后,我想我可以通过以下方式强制执行我自己的权限类行为:

创建一个自定义权限类,该类将rest_framework.permissions.BasePermission子类化 覆盖具有\u对象\u权限方法 在方法内部,编写一个逻辑,将请求用户映射到我的自定义RBAC模型中,以检查他是否已授予适当的权限 返回相应的布尔值 好的,在检查了rest\u frameworks的permissions.py之后,我想我可以通过以下方式强制执行我自己的权限类行为:

创建一个自定义权限类,该类将rest_framework.permissions.BasePermission子类化 覆盖具有\u对象\u权限方法 在方法内部,编写一个逻辑,将请求用户映射到我的自定义RBAC模型中,以检查他是否已授予适当的权限 返回相应的布尔值
这很好,但我不打算使用Django内置的基于组或基于角色的权限。我已经设计了自己的RBAC模型结构,它利用了额外的自定义模型,如模块、操作/动作、对象。。。。。。也就是说,我能想到的唯一方法就是设计我自己的权限类。。。问题是我不知道从哪里开始……这很好,但我不打算使用Django内置的基于组或基于角色的权限。我已经设计了自己的RBAC模型结构,它利用了额外的自定义模型,如模块、操作/动作、对象。。。。。。也就是说,我能想到的唯一方法就是设计我自己的权限类。。。问题是我不知道从哪里开始。。。。
class MyViewClass(viewsets.ModelViewSet):
    queryset = SomeModel.objects.all()
    ...
    ...
    ...

    def get_queryset(self):
        return SomeModel.objects.filter(some_field='foo')

    ...
    ...
    ...