DRF源码学习-Permission

MicLon原创2022年1月31日
大约 1 分钟

权限组件Permission

A base class from which all permission classes should inherit.. 所有权限类都应该继承的基类。 —— 来自BasePermission类注释

与认证组件相同,自定义权限也需要继承自内置父类BasePermission

1.BasePermission

BasePermission中有两个方法:

  • has_permission
    • 顾名思义,是否有权限,返回True or False来判断是否有权限
  • has_object_permission
    • has_permission是请求进来就检测权限了,而has_object_permission则是在取对象的时候判断是否该对象有操作权限

2.编写自己的权限认证

class MyPermission(BasePermission):
    message = '你没有此权限~~~'

    def has_permission(self, request, view):
        if request.user.is_superuser:
            return True
        return False


class TestView(APIView):
    permission_classes = [MyPermission]

    def get(self, request):
        return JsonResponse({"result": "success"})

3.权限组件原理

上文认证组件中,由于子类APIView重写了父类View的dispath,所以,当认证组件通过后,将会来到权限的校验,在源码中得到印证。

通过两篇认证和权限组件的源码实现,其实可以发现真正的逻辑十分清晰和简单,以后在自己做项目甚至框架的过程中值得学习与参考。

Loading...