• 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'
  • 相关阅读:
    IOS5,6,7不同版的适配. 强制旋转和自动旋转.
    第3条:多用字面量语法,少用与之等价的方法
    UIViewAnimation警告
    ViewController的生命周期分析和使用
    Chrome浏览器下调试SASS
    Reactjs相比较原生方案是绝对的快吗?哪些情况下React有优势
    js收集的一些好的题型
    js异步加载 defer和async 比较
    前端知识点
    H5下拉刷新特效demo,动画流畅
  • 原文地址:https://www.cnblogs.com/mofujin/p/11723707.html
Copyright © 2020-2023  润新知