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'

Auth主件的(RBAC) 六表的更多相关文章

  1. Bootstrap<基础六> 表单

    Bootstrap 通过一些简单的 HTML 标签和扩展的类即可创建出不同样式的表单. 表单布局 Bootstrap 提供了下列类型的表单布局: 垂直表单(默认) 内联表单 水平表单 垂直或基本表单 ...

  2. thinkphp Auth认证类 比RBAC更好的权限认证方式(Auth类认证)

    thinkphp Auth认证类 比RBAC更好的权限认证方式(Auth类认证)    Auth 类已经在ThinkPHP代码仓库中存在很久了,但是因为一直没有出过它的教程, 很少人知道它, 它其实比 ...

  3. drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用

    三大认证工作原理简介 认证.权限.频率 源码分析: from rest_framework.views import APIView 源码分析入口: 内部的三大认证方法封装: 三大组件的原理分析: 权 ...

  4. 7) 项目准备流程 和 django权限六表

    一.项目准备 1. 创建django项目 2. 创建数据库 —— init文件中声明mysql —— settings中配置数据库 import pymysql pymysql.install_as_ ...

  5. 不使用ASP.NET服务器端控件(包括form表单不加runat="server")来触发.cs里的事件(方法),(适用于有代码洁癖者)。

    很多时候,我们使用服务器端控件写出的代码,会给我们生成一些很多我们看不懂的代码(初学者),但是有时候我们并不需要这些代码(业务需求不同),对于生成的一些代码感到多余.所以我就开始想,有没有一种可能:不 ...

  6. CPF 入门教程 - 控件布局(六)

    CPF netcore跨平台桌面UI框架 系列教程 CPF 入门教程(一) CPF 入门教程 - 数据绑定和命令绑定(二) CPF 入门教程 - 样式和动画(三) CPF 入门教程 - 绘图(四) C ...

  7. ShardingJdbc-分表;分库;分库分表;读写分离;一主多从+分表;一主多从+分库分表;公共表;数据脱敏;分布式事务

    目录 创建项目 分表 导包 表结构 Yml 分库 Yml Java 分库分表 数据库 Yml 读写分离 数据库 Yml 其他 只请求主库 读写分离判断逻辑代码 一主多从+分表 Yml 一主多从+分库分 ...

  8. 一套能体现 RBAC 的表结构设计

    1.RBAC 概述 2.表结构设计 2.1.用户表 2.2.角色表 2.3.权限表 2.4.用户角色(关系)表 2.5.角色权限(关系)表 3.总结 1.RBAC 概述 RBAC(Role-Based ...

  9. 【数据库】Mysql中主键的几种表设计组合的实际应用效果

    写在前面 前前后后忙忙碌碌,度过了新工作的三个月.博客许久未新,似乎对忙碌没有一点点防备.总结下来三个月不断的磨砺自己,努力从独乐乐转变到众乐乐,体会到不一样的是,连办公室的新玩意都能引起莫名的兴趣了 ...

随机推荐

  1. go语言系列--前言

    我为什么要学golang语言 绝不是一时兴起,也不是人云亦云,这是我规划了很久的事了. 我曾自学过C语言,C++语言,Python语言,可都学的不精,原因我想是不知道为了什么而学的,可是这就是缺少学习 ...

  2. xwiki安装部署

    环境介绍 http://aiushtha-mybook.stor.sinaapp.com/xwiki/xwiki%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E8%BF%9 ...

  3. esLint——规范你的代码(转)

    团队协作时,若是团队的代码风格统一,能够大大减少沟通成本. 什么是 ESLint ? ESLint 是在 ECMAScript/JavaScript 代码中识别和报告模式匹配的工具,它的目标是保证代码 ...

  4. 【ELK学习】初识ElasticSearch

    ES(elasticsearch) 是一个高可扩展的.开源的全文检索和分析引擎,它允许你存储.检索.分析海量数据,以一种快到近乎实时的速度. ES用例场景: 使用ES存储商品目录.清单,提供检索.输入 ...

  5. sqli-libs(7)

    导出文件GET字符型注入 0x01介绍 导出到文件就是可以将查询结果导出到一个文件中,如常见的将一句话木马导出到一个php文件中,sqlmap中也有导出一句话和一个文件上传的页面 常用的语句是:  s ...

  6. [CSP-S模拟测试]:maze(二分答案+最短路)

    题目传送门(内部题88) 输入格式 第一行两个数$n,m$.第二行四个数$sx,sy,tx,ty$.分别表示起点所在行数.列数,终点所在行数.列数.接下来$n$行,每行$m$个数,描述迷宫.最后一行一 ...

  7. Tomcat部署时war和war exploded区别以及平时踩得坑

    war和war exploded的区别 在使用IDEA开发项目的时候,部署Tomcat的时候通常会出现下边的情况: 是选择war还是war exploded 这里首先看一下他们两个的区别: war模式 ...

  8. js fuction函数内return一个内部函数详解

    今天在网上,看到一篇关于js函数难点的文章,js函数的一些难点.在那上面提了一下,关于js函数返回另一个函数的问题,并附上了一道面试题: var add = function(x){ var sum  ...

  9. 一、基础篇--1.1Java基础-自定义注解的场景及实现

    自定义注解使用场景: 类属性自动赋值,例如对上下文.传入参数等赋值 验证对象属性完整性,例如,对参数的校验 代替配置文件功能,像spring基于注解的配置 可以生成文档,例如java 最早提供的注解. ...

  10. MyRocks安装部署

    参考:https://www.cnblogs.com/WonderHow/p/5621591.html CentOS 7.3 gflags:git clone https://github.com/g ...