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‘
AttributeError: Manager不可用;的身份验证。User已经被换成了api.user
原文:https://www.cnblogs.com/matt0668/p/12925808.html