drf 修改权限组件的判断方式OR
原权限判断代码
def check_permissions(self, request):
"""
Check if the request should be permitted.
Raises an appropriate exception if the request is not permitted.
"""
for permission in self.get_permissions():
if not permission.has_permission(request, self):
self.permission_denied(
request,
message=getattr(permission, 'message', None),
code=getattr(permission, 'code', None)
)
修改判断(后用OrPermissionAPIView代替APIView)
from rest_framework.views import APIView
class OrPermissionAPIView(APIView):
def check_permissions(self, request):
"""
重写check_permissions方法,把权限变成or
"""
# 创建一个list存放没有通过权限的权限类
no_permission_list = []
for permission in self.get_permissions():
if permission.has_permission(request, self):
# 有一个通过即返回
return
else:
no_permission_list.append(permission)
else:
self.permission_denied(
request,
message=getattr(no_permission_list[0], 'message', None),
code=getattr(no_permission_list[0], 'code', None)
)
视图
#走正常判断逻辑and
class OrderView(APIView):
def get(self, request):
print(request.user, request.auth)
return Response({'status': 'OrderView'})
from ext.views import OrPermissionAPIView
#走or判断逻辑
class UserView(OrPermissionAPIView):
def get(self, request):
print(request.user, request.auth)
return Response({'status': 'UserView'})
本文作者:Sherwin
本文链接:https://www.cnblogs.com/sherwin1995/p/16747599.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步