RBAC (Role-Based Access Control)
用于公司内部:CRM客户关系管理
原理:权限与角色相关联,角色看作是一个组(公司分部门)
权限、角色、用户。(赋予用户角色)
django的auth组件(app)实现RBAC。
--auth_user       用户表:用户信息
--auth_groups     组表,部门表(角色)
--auth_permisson 权限表:发工资的权限,招人的权限...
--auth_group_permissons        部门和权限是多对多,中间表
--auth_user_groups                 用户和部门是多对多,中间表
--auth_user_user_permissions  用户和权限是多不多,中间表

 

simple-ui 
1、安装django-simpleui
2、在应用里注册

  INSTALLED_APPS = [
    'simpleui',
    ]

3、再重新进入admin后台管理它就变了

 

JWT (Json Web Token)  就是token,一种前后端的认证方式。认证是否是这个用户。

token由三段构成。后端不存token,存加密方式和密钥。
eyJ0eXAiOiJXXXXXXX.eyJzdWIiOjXXXXXXX.TJVA95OrMcBXXXXXXXX
header头部:认证方式jwt,公司名字...      {"typ":"JWT","alg":"HS256"}
payload荷载:auth_user表里的用户信息,签发时间...      {"user_id":1,"username":"andy","exp":1626505593,"email":""}
signature签名:头部与荷载拼接加密后的串。

1、签发:登录成功后把token返回给客户端,下次发送请求时带过来。
2、校验:把header和payload用相同的加密方式再算一般,得到的串和发来的串一致就校验成功。


 

str转bytes用encode('utf-8')
s = 'hello'
b = s.encode('utf-8')
bb = bytes(b,encoding='utf-8')  # 这个也可以,调用类实列化对象。


bytes转str用decode('utf-8')
b = b'world'
s = b.decode('utf-8')
ss = str(b,encoding='utf-8')    # 调用类实列化对象。



base64编码
base64的长度是固定的,必须是4的整数倍,不够用=补。
编码和解码得是bytes类型。
user_info = {'name':'lqz'}
user_info_str = json.dumps(user_info)    # 字典序列化成json格式的str
b64 = base64.b64encode(bytes(user_info_str,encoding='utf-8'))  # str转成bytes后编码
print(b64)   # b'eyJuYW1lIjogImxxeiJ9'  编码后的串


base64解码
bb64 = base64.b64decode('eyJuYW1lIjogImxxeiJ9'.encode('utf-8')) # 把串转成bytes类型后解码
print(bb64)  # 解码后的数据 b'{"name": "lqz"}'

 

jwt快速签发token
1、安装djangorestframework-jwt  # 这个很久没维护了
    djangorestframework-simplejwt # 这个和上面的基本一样。
2、在路由中配置,向这个地址发送post请求,携带用户名密码,就能签发token。(内部使用的是auth_user表)
  from rest_framework_jwt.views import obtain_jwt_token
    path('login/',obtain_jwt_token),

 

jwt的认证类得配合权限一起使用。

在视图类中配置认证类,权限类
JSONWebTokenAuthentication的父类重写了authenticate方法。
请求头的key是Authorization, value是jwt+空格+token

from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework.permissions import IsAuthenticated
authentication_classes = [JSONWebTokenAuthentication,]  # 认证类
permission_classes = [IsAuthenticated]     # 权限类,配置后如果不带token就无法访问。

 

 

 

 

posted on 2021-07-17 13:59  孟玉  阅读(133)  评论(0)    收藏  举报