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'
测试六表
Traceback (most recent call last): File "D:day74_djprojscript _model.py", line 10, in <module> user = models.User.objects.first() File "C:Users10243AppDataLocalProgramsPythonPython36libsite-packagesdjangodbmodelsmanager.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'