array(2) { ["docs"]=> array(0) { } ["count"]=> int(0) } 111string(0) "" int(1) int(10) int(70) int(8640000) string(13) "likecs_art_db" array(1) { ["query"]=> array(1) { ["match_all"]=> object(stdClass)#28 (0) { } } } array(1) { ["createtime.keyword"]=> array(1) { ["order"]=> string(4) "desc" } } int(10) int(0) int(8640000) array(2) { ["docs"]=> array(0) { } ["count"]=> int(0) } drf框架中的Permission权限组件 - 爱码网

05-02 权限组件

1.系统自带的权限认证:

"""
系统自带权限认证类:
1) AllowAny: 允许所有用户,校验方法直接返回True
2) IsAuthenticated: 只允许登陆用户访问 reqest.user and request.user.is_authenticated
3) IsAuthenticatedOrReadOnly: 游客只读,登陆用户无限制 get、option、head请求无限制
4) IsAdminUser: 是否是后台用户 校验request.user和request.user.is_staff(可以登陆后台管理系统的用户)
5) 以上4个类都可以通过from rest_framework.permission import 导出来点进去看源码的权限规制
"""

2.自定义权限类:为管理员分组成员

1) 自定义权限类步骤:

"""
1) 继承BasePermission类,重写has_permission方法
2) 权限规则(has_permission方法实现体):
	返回True,代表有权限
	返回False,代表无权限
"""

2) 代码如下:

# utils.permissions.py
from rest_framework.permissions import BasePermission

class AdminPermission(BasePermission):
    """为管理员分组成员"""
    def has_permission(self, request, view):
        # 获取当前登陆用户
        user = request.user
        # 如果未登录,返回False --> 无权限
        if not user:
            return False
        # 判断用户是否是管理分组的用户(管理员分组是Group表中的一条自定义记录)
        # 如果不是返回False --> 无权限
        if not user.gourps.filter(name='管理员'):
            return False
        return True

3.权限认证使用方法:

1)全局使用:

settings.py 中配置

# settings.py
'REST_FRAMEWORK' = {
    'DEFAULT_PERMISSION_CLASSES': [
        # 系统的权限规则
        'rest_framework.permissions.AllowAny',
        # 自定义的权限规则
        'utils.permissions.AdminPermission'
    ]
}

2) 局部使用:

views.py 需要使用的视图类配置类属性:

# views.py 
class MyAPIView(APIView):
    permission_classes = [AllowAny, AdminPermission]

相关文章: