Provided they inherit from rest_framework.permissions.BasePermission, permissions can be composed using standard Python bitwise operators. For example, IsAuthenticatedOrReadOnly could be written:
from rest_framework.permissions import BasePermission, IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
class ReadOnly(BasePermission):
def has_permission(self, request, view):
return request.method in SAFE_METHODS
class ExampleView(APIView):
permission_classes = (IsAuthenticated|ReadOnly,)
def get(self, request, format=None):
content = {
'status': 'request was permitted'
}
return Response(content)
现在,DRF允许使用按位运算符组合权限:和-和|-或-。在
From the docs:
编辑:请注意
IsAuthenticated|ReadOnly
后面有一个逗号。在您需要按照文档中的描述构建自己的custom http://www.django-rest-framework.org/api-guide/permissions/#custom-permissions。在
比如:
那么在你看来:
^{pr2}$我想你可以在这里使用
django-rules
库。Link它是一个与决策树非常相似的基于规则的引擎,可以很容易地与DRF的权限类框架集成。在
最棒的是,您可以对简单权限执行设置操作,并从中创建复杂权限。在
示例
谓词可以对给定参数执行几乎任何操作,但如果检查的条件为True,则必须始终返回True,否则返回False。 现在组合这两个谓词。。在
^{pr2}$您可以在权限类的has\u permissions方法中使用这个新的谓词规则
is_object_editable
。在相关问题 更多 >
编程相关推荐