码迷,mamicode.com
首页 > 其他好文 > 详细

drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用

时间:2019-10-21 21:00:34      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:object   ram   mob   view   设置   定义   角色   turn   mamicode   

三大认证工作原理简介

源码分析:

from rest_framework.views import APIView

技术图片

 

源码分析入口:

 

技术图片

 

 

 内部的三大认证方法封装:

技术图片

三大组件的原理分析:

技术图片

 

 权限六表分析

  基于用户权限访问控制的认证(RBAC):Role-Based-Access-Control;基于auth的认证规则(了解)。

Django框架采用的是RBAC认证规则:通常分为:三表规则、五表规则、Django采用的是六表规则。

三表:用户表、角色表、权限表

五表:用户表、角色表、权限表、用户角色关系表、角色权限关系表、用户权限关系表

六表:用户表、角色表、权限表、用户角色关系表、角色权限关系表、用户权限关系表

技术图片

源码分析三者的关系

用户表:角色groups,权限user_permissions

角色表:用户user_set,权限permissions

权限表:用户user_set,角色group_set

重点:如果自定义User表后,再另一个项目中采用原生User表,完成数据库迁移时,可能失败。

解决的办法:

  (1)、卸载Django,重新安装(源码问题)

  (2)、将django.contrib下面的admin、auth下的数据迁移记录文件全部清空

from django.contrib.auth.models import AbstractUser,User

技术图片

 

 

创建自定义User表

models.py

from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
    mobile = models.CharField(max_length=11, unique=True)#设置成唯一的
class Meta: db_table = api_user verbose_name = 用户表 verbose_name_plural = verbose_name def __str__(self): return self.username

 

数据库迁移:

>> python3 manage.py makemigrations

>> python3 manage.py  migrate


>> #创建超级用户

>>> python3 manage.py createsuperuser


>>  admin   admin123

配置自定义user表

在settings.py下面输入,告诉django系统自己创建自定义的用户表。

AUTH_USER_MODEL = "api/User"

 

创建好的三表结构

技术图片

 脚本启动测试查询数据

# django脚本话启动
import os, django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dg_proj.settings")
django.setup()

from api import models
user = models.User.objects.first()  # type: models.User
print(user.username)
print(user.groups.first().name)
print(user.user_permissions.first().name)

from django.contrib.auth.models import Group
group = Group.objects.first()
# print(group.name)
# print(group.user_set.first().username)
# print(group.permissions.first().name)

认证组件的源码分析

技术图片

 

 点击进去,逐一分析,第一个分析的是,认证组件,

def perform_authentication(self, request):

 

技术图片

 

 需要点击定位到request下面的user方法继续往下查看其原理

技术图片

 

 内部user的方法

技术图片

 

 点击 self._authenticate查看认证源码的精髓实现认证的部分

技术图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

  

 

drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用

标签:object   ram   mob   view   设置   定义   角色   turn   mamicode   

原文地址:https://www.cnblogs.com/Gaimo/p/11715775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!