1.RBAC 和Auth的区别

基于RBAC一般Djagno 会用 和Auth 相对来说高级一点

2.RBAC( role Based Accsess Control)的六表之间的数据传输

2.1 Django 采用的是RBAC 认证规则,RBAC 通常分为三表规则,五表规则, Django则才用的是六表规则

三 表: User   >>>用户表

    Group >>>角色表

    Permission >>>权限表

Django 权限六表

五表:用户表,角色表,权限表,用户与角色关系表,角色权限关系表

六表:用户表,角色表,权限表,用户与角色关系表,角色权限关系表,用户与权限

permission :权限表

Group:角色表

fro m Django.contrib.auth.models import User

(1)继承AbstractUser 这个类

from django.db import models

# Create your models here.

# 重点: 如果我们自定义user表, 再另一个项目中采用原生的User表,完成数据库迁移时,可能会失败
#如何做*(1) 卸载Django 重新装
# (2) 将Djjango中的 contrib 下面的admin 下面的数据库迁移命令记录清空 from django.contrib.auth.models import AbstractUser class User(AbstractUser): #继承AbstractUuser)
mobile = models.CharField(max_length=11)
# 自定义创建表名
class Meta:
db_table = 'api_user'
verbose_name = '用户表'
verbose_name_plural = verbose_name def __str__(self):
return self.username # 用户表怎么访问 >>>权限表(permission) User下关联的外键字段是???user_permission
# 用户表怎么访问 >>>角色表(Group) >>User下的查询字段>groups
# 反向字段 权限表访问用户user_set related_name="user_set",
# 反向字段 角色表访问用户user_set related_name="user_set", # Group 访问权限表permission """
permissions = models.ManyToManyField(
Permission, >>>>正向 按字段 虽然没有命名 反之group_set
verbose_name=_('permissions'),
blank=True,
)
"""
from django.contrib.auth.models import User
# 1.自定义user表 """ class User(AbstractUser):
# 这里源码是注释掉的
Users within the Django authentication system are represented by this
model. Username, password and email are required. Other fields are optional. class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'
#
"""

(2) 在settings 中进行配置

# 自定义User表的配置 指名不再用原来的django 表 而是用我们自己自定义的表
AUTH_USER_MODEL = 'api.user'
(3)数据库迁移命令 python manage.py makemigtrations  >>> python manage.py migrate

测试六表

Traceback (most recent call last):
File "D:\day74_djproj\script\t_model.py", line 10, in <module>
user = models.User.objects.first()
File "C:\Users\10243\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\models\manager.py", line 198, in __get__
cls._meta.swapped,
AttributeError: Manager isn't available; 'auth.User' has been swapped for 'api.user'

cls._meta.swapped,

 

AttributeError: Manager不可用;的身份验证。User已经被换成了api.user

错的原因在于

from django.contrib.auth.models import User
# 1.自定义user表

在被导入到模块中又导如了User 以至于 无法识别User

User表的正向反向

# 六表之间的测试

import os, django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day74_djproj.settings")
django.setup()
from api import models
user = models.User.objects.first()
# print(user.username,type(user)) admin <class 'api.models.User'>
print(user,type(user)) # admin <class 'api.models.User'> 直接获取对象
print(user.groups.first().name) #ok
print(user.user_permissions.first().name) # Can add 用户表

Goup表的正向 反向

# 角色表的查询
from django.contrib.auth.models import Group
group = Group.objects.first()
print(group.name) # ok # 分组下的用户们
print(group.user_set.first().username) # 角色表差 权限表
print(group.permissions.first().name) # Can change 用户表

Permissions 表的正向反向

from django.contrib.auth.models import Permission
P_16 = Permission.objects.filter(pk=16).first()
print(P_16.user_set.first().username) # admin
p_17 = Permission.objects.filter(pk=17).first()
print(p_17.group_set.first().name) # 管理员
# 自定义User表的配置 指名不再用原来的django 表 而是用我们自己自定义的表
AUTH_USER_MODEL = 'api.user'

最新文章

  1. js文件上传
  2. javascript onblur事件阻塞选中input框
  3. 异步编程中的最佳做法(async await)
  4. Linux命令:traceroute(windows中为tracert)
  5. iOS 手势大全
  6. IntPtr问题
  7. Asp .Net MVC4笔记之目录结构
  8. LCD接口和RGB介绍
  9. Linux 文件系统下的压缩、解压命令
  10. GET和POST两种基本请求方法(转自博主--在途中#)
  11. zepplin0.7.2报错ERROR, exception: null, result: %text java.lang.NullPointerException的处理
  12. __attribute__ ((default)) 和 __attribute__ ((hidden))
  13. Python数据分析Numpy库方法简介(二)
  14. JavaScript中的window对象的属性和方法;JavaScript中如何选取文档元素
  15. Mvc检查图片格式后上传
  16. TCP连接的3次握手和4次挥手
  17. WINDOWS 端口查看
  18. 【网络编程一】主机字节序与网络字节序以及ip地址转换函数
  19. Hadoop体系结构杂谈
  20. [进程]kill 9和15,以及pkill, killall

热门文章

  1. 【转载】opencv 二值化函数——cv2.threshold
  2. Spring Cloud Stream教程(一)介绍Spring Cloud Stream
  3. tomcat+nginx负载均衡
  4. Nodejs搭建音视频通信-信令服务器 总结
  5. vue中下载excel的使用,后端链接两种情况,一个是链接,一个是文件流
  6. C#调用本地摄像头-AForge库简单使用
  7. SpringBoot(十二):SpringBoot整合Kafka
  8. leetcode-mid-sorting and searching - 240. Search a 2D Matrix II -NO
  9. 嵌入式Linux之NFS配置
  10. (C++C#类型互转工具)使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明