权限简介

权限就是某些功能只对特定的用户开放,比如django中创建用户可分为超级用户和普通用户,此时超级用户就有权限进入后台管理系统,而普通用户就没有权限,这是怎么做到的呢?

这就是权限组件的作用。

局部使用

from rest_framework.permissions import BasePermission

class UserPermission(BasePermission):
"""自定义权限类:继承BasePermission,重写has_permission方法"""
message = '不是超级用户,查看不了' def has_permission(self, request, view):
# user_type = request.user.get_user_type_display()
# if user_type == '超级用户':
user_type = request.user.user_type
print(user_type)
if user_type == 1:
return True
else:
return False class Course(APIView):
authentication_classes = [TokenAuth, ]
permission_classes = [UserPermission,] def get(self, request):
return HttpResponse('get') def post(self, request):
return HttpResponse('post')

局部使用只需要在视图类里加入:

permission_classes = [UserPermission,]

全局使用

# 在settings.py中进行设置

REST_FRAMEWORK={
"DEFAULT_AUTHENTICATION_CLASSES":["app01.service.auth.Authentication",],
"DEFAULT_PERMISSION_CLASSES":["app01.service.permissions.SVIPPermission",]
}

源码分析

# permission.py

def check_permissions(self, request):
for permission in self.get_permissions():
if not permission.has_permission(request, self):
self.permission_denied(
request, message=getattr(permission, 'message', None)
)
# self.get_permissions()

def get_permissions(self):
return [permission() for permission in self.permission_classes]

权限类使用顺序:先用视图类中的权限类,再用settings里配置的权限类,最后用默认的权限类

最新文章

  1. HSDB - HotSpot debugger
  2. WEB前端开发CSS基础样式全面总结
  3. PRML读书会第七章 Sparse Kernel Machines(支持向量机, support vector machine ,KKT条件,RVM)
  4. Java读取Execl表格数据
  5. ember.js:使用笔记9 开始单元测试
  6. hdu 4465 Candy 数学
  7. 动态加载 js
  8. Ural 1297 Palindrome 【最长回文子串】
  9. 上curl java 模拟http请求
  10. 【Python之路】第七篇--Python基础之面向对象及相关
  11. Codeforces Round #367 (Div. 2) C. Hard problem
  12. 如何使用 AngularJS 的 ngShow 和 ngHide
  13. 页面中引入mui 地址选择,点击页面中其他input时页面回到顶部
  14. windows系统下升级nodejs
  15. Windows使用tail命令跟踪日志
  16. 铁乐学python_Day42_线程池
  17. java官网门户源码 SSM框架 自适应-响应式 freemarker 静态模版引擎
  18. js 参数传递
  19. java高级---->Thread之FutureTask的使用
  20. Oracle Schema Objects——Synonyms

热门文章

  1. AMD 锐龙三代系列台式机处理器(台积电7纳米工艺)
  2. Jmeter做webservices接口测试
  3. gitlab的搭建和使用(转)
  4. R语言排序 -- sort() order() rank()
  5. 每日一问:不一样的角度吐槽下 DataBinding
  6. BurpSuite pro v2.0 使用入门教程
  7. 图、流程图、ER图怎么画及常见画图工具(流程图文章汇总)
  8. OCR识别的Android端实现
  9. git强制推送命令
  10. List Map Set的线程安全