Auth主件的(RBAC) 六表

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_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'
原文地址:https://www.cnblogs.com/mofujin/p/11723707.html