基于自定义表编写认证类、django-jwt源码分析、权限、simpleui
面向对象继承后属性查找顺序
从根目录开始找
当方法重写了,就是从重写的方法开始
大致流程图:
翻译函数
只要做了国际化,就会显示当前国家语言
from django.utils.translation import gettext_lazy as _
msg = _('Signature has expired.')
_是函数的别名,这个函数是翻译函数,只要做了国际化,就是显示自己国际化中定义的语言,这里是中文。
基于自定义表编写认证类
认证类:
视图类:
路由:
查询优化:
每次访问需要登录的接口,都会去查数据库
所以咱们可以做优化
1 自己生成一个user对象
2 直接返回user_id,以后用的时候,再查数据库
小结:
先写认证类,继承BaseAuthentication,重写authenticate方法,从JSONWebTokenAuthentication进入源码找authenticate,里面如果token为空,返回值就为空,将token传入payload取出payload,从payload中可以以字典的形式取出uer_id,当出现其他错误时抛异常,最后返回两个值,用户信息与token。
django-jwt源码分析
签发
入口是:
obtain_jwt_token---》from rest_framework_jwt.views import obtain_jwt_token
本质是:
看ObtainJSONWebToken视图类
权限认证禁用
校验用户名密码和生成token,写在了序列化类的全局钩子validate中
全局钩子validate
总结:
前端携带用户名密码到后端,执行后端的post方法,后端生成一个序列化类的对象,走了全局钩子,全局钩子中通过用户名密码获取用户(如果获取不到抛异常),获取到后签发token,签发完返回,在视图类中,取出来,返回给前端。
认证源码
父类中BaseJSONWebTokenAuthentication的authenticate
总结
逻辑和自定义的一模一样,只是获取token复杂一点,有个前端。
权限介绍
所有项目都会有权限控制
ACL(Access Control List,访问控制列表) ---------- 这个是针对于互联网用户
将用户和权限对接,是多对多,例如有些用户可以点赞评论,有的用户只能点赞
RBAC(Role-Based Access Control,基于角色的访问控制),基于角色的访问控制,用于公司内部项目
将用户与角色对接,然后角色与对象的权限对接,django的admin+auth就是使用了这套认证机制
ABAC(Attribute-Based Access Control,基于属性的访问控制),又称为PBAC(Policy-Based Access Control,基于策略的访问控制)
CBAC(Claims-Based Access Control,基于声明的访问控制)。
传统的ACL、RBAC的架构是{subject,action,object}
ABAC的架构是{subject,action,object,contextual}且为他们添加了parameter(参数)
subject属性:比如用户的年龄、部门、角色、威望、积分等主题属性
action属性:比如查看、读取、编辑、删除等行为属性
object属性:比如银行账户、文章、评论等对象或资源属性。
contextual属性:比如时段、IP位置、天气等环境属性
在python中写公司内部项目比较多,使用rbac控制居多
RBAC是基于角色的访问控制(Role-Based Access Control ),在RBAC中,权限与角色相关联,用户通过称为适当角色的成员而得到这些角色的权限,这就极大地简化了权限的管理,这样管理都是层级相互依赖的,权限赋予给角色,而角色又赋予用户,这样权限设计很清楚,管理起来很方便
rbac如何设计
-用户表---》一堆用户:张三,李四
-角色表(group组)---》用户的角色:后勤部,开发部,总裁办。。。
-权限表-----》放了一堆权限:发电脑,提交代码,删除代码,发工资
-用户和角色多对多:一个用户属于多个角色,一个角色属于多个用户
-角色 和权限多对多:一个角色有多个权限,一个权限属于多个角色
--------rabc----通过5张表可以实现
-django为了更细粒度划分---》多了一张表,用户和权限多对多
simpleui的使用
公司内部:做公司内的项目需要使用这套权限控制
方案一:
使用django-admin写,快速写出一套具有权限管理的系统
django admin的界面不好看:第三方美化———simpleui
方案二:
自己写,前端使用vue,后端使用django,做公司内部的项目
-第三方开源的权限控制 项目
-python界:django-vue-admin 7期学长写的
-java界:若依
-go界:gin-vue-admin
在配置表中注册