权限控制是web中的重要组成部分。与以往的博客系统不同,本次工具页面仅支持注册用户。
每个注册用户都能访问到工具页面,并且提交自己的task来选择具体的工具来处理自己提交的文件。每个注册用户都只能访问到自己提交的task,而管理员则可以查看所有task。
我们先来设置工具相关页面权限,我们规定只有注册用户才能访问:
修改setting,添加在installed_apps之后
- # settings.py
- REST_FRAMEWORK = {
- 'DEFAULT_PERMISSION_CLASSES':[
- 'rest_framework.permissions.IsAuthenticated',
- ]
- }
在views中添加permissions信息
- #simpletool/views.py
-
- from simpletool.permissions import IsAuthenticatedOrAdmin
- # Create your views here.
-
- class simpletoolList(generics.ListCreateAPIView):
- queryset = simpleTool.objects.all()
- serializer_class = ToolListSerializer
- permission_classes = [IsAuthenticatedOrAdmin]
-
- class simpletoolDetail(generics.RetrieveUpdateDestroyAPIView):
- queryset = simpleTool.objects.all()
- serializer_class = ToolDetailSerializer
- permission_classes = [IsAuthenticatedOrAdmin]
补充permissions.py文件
- from rest_framework import permissions
-
- class IsAuthenticatedOrAdmin(permissions.IsAuthenticated):
- def has_permission(self, request, view):
- # 对注册用户开放操作
- # if request.method in permissions.SAFE_METHODS:
- if (request.user.is_authenticated) and (request.method in permissions.SAFE_METHODS):
- return True
- # 仅管理员可进行其他操作
- return request.user.is_superuser
permission_classes 可以接收一个列表,因此权限控制类可以设置多个,请求必须满足所有控制条件才允许被放行。
现在来让我们看一下直接访问时的状况:
http http://127.0.0.1:8000/api/simpletool/
创建一个普通用户
测试权限
http -a john:123456 http://127.0.0.1:8000/api/simpletool/
测试PUT权限
http -a john:123456 POST http://127.0.0.1:8000/api/simpletool/ title="test_tool"
管理员权限测试
http -a xiaofan0101:123456 POST http://127.0.0.1:8000/api/simpletool/ title="test_tool"