程序员的资源宝库

网站首页 > gitee 正文

基于自定义表编写认证类、django-jwt源码分析、权限、simpleui

sanyeah 2024-03-29 17:41:08 gitee 6 ℃ 0 评论

面向对象继承后属性查找顺序

从根目录开始找

 当方法重写了,就是从重写的方法开始

 大致流程图:

 

翻译函数

只要做了国际化,就会显示当前国家语言

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,签发完返回,在视图类中,取出来,返回给前端。

 认证源码

从from rest_framework_jwt.authentication import JSONWebTokenAuthentication的JSONWebTokenAuthentication开始看
JSONWebTokenAuthentication:

 父类中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

 在配置表中注册

 

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表