Django-auth组件

Django-auth组件

1 表结构

我们从python manage.py migrate为我们创建的auth组件内置的表开始看

  • auth_user:用户表存储用户信息(登录admin后台)

    里面的字段分两类:用户基本信息(用户名,邮箱,密码等)和2张M2M表(用户+权限,用户+组)(与权限相关)

  • auth_permission:权限表,存储所有表生成的增删改查的URL(每张表4个路由<——>路由的别名)

  • auth_user_user_permissions:用户表和权限表的多对多关系表,里面放user_idpermission_id

  • auth_group:组表,里面放id和组名,和权限表有多对多的关系(对权限进行分组)

  • auth_user_groups:用户表和组表的关系表,给用户分组

  • auth_group_permissions: 组表和权限表的关系表,给权限分组

2 登录路由

当我们执行python manage.py createsuperuser时,会创建超级用户

我们从超级用户的登录路由来看

在这里插入图片描述

源码嵌套比较多(要重复看),重点在重用和解耦,可实现比较多的自定义

3 首页权限分配

当用户登录成功后,展示的是基于admin注册的表,其中

  • 超级用户全部可见

    在这里插入图片描述

  • 其他用户,只要增删改查4个权限有一个权限被分配,就可以看见

    在这里插入图片描述

我们来看auth源码中是如何控制这种权限的分配

从前面的路由分析中,当我们通过登录成功后,就是执行self.index来展示首页的信息

在这里插入图片描述

总结:

  • 获取所有通过admin注册的Model
  • 根据当前的request.user去数据库校验,判断是否展示

4 按钮控制

auth组件中我们可以控制是否展示add、delete等按钮

上文的分析图中我们可以得到app_list中包含的是获取的具体权限信息

app_list:
[{"name": "App01","app_label": "app01","app_url": "/admin/app01/","has_module_perms": true,"models": [{"model": "<class 'app01.models.Depart'>","name": "Departs","object_name": "Depart","perms": {"add": false,"change": false,"delete": false,"view": true},"admin_url": "/admin/app01/depart/","add_url": "None","view_only": true}]},{"name": "Authentication and Authorization","app_label": "auth","app_url": "/admin/auth/","has_module_perms": true,"models": [{"model": "<class 'django.contrib.auth.models.Group'>","name": "Groups","object_name": "Group","perms": {"add": true,"change": true,"delete": true,"view": true},"admin_url": "/admin/auth/group/","add_url": "/admin/auth/group/add/","view_only": false}]}
]

我们可以通过每个app下每张表的权限true/false来判断是否有权限

具体判断则在每张表的HTML模板中

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/15983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为OD机试【找出通过车辆最多颜色】(java)(100分)

1、题目描述 在一个狭小的路口&#xff0c;每秒只能通过一辆车&#xff0c;假设车辆的颜色只有 3 种&#xff0c;找出 N 秒内经过的最多颜色的车辆数量。 三种颜色编号为0 &#xff0c;1 &#xff0c;2。 2、输入描述 第一行输入的是通过的车辆颜色信息[0,1,1,2] &#xff0…

嵌入式0基础开始学习 ⅠC语言(4)循环结构

0.问题引入 求0~100数据之和&#xff1a; int sum 0; sum 1234....100; 废手&#xff0c;那么有没有一种好的方法取操作呢&#xff1f; int sum 0; int i 1; sum sum i; // sum 01; …

GB28181协议中常用SDP信息的含义

u字段&#xff1a;u行应填写视音频文件的URI。该URI取值有两种方式&#xff1a;简捷方式和普通方式。简捷方式直接采用产生该历史媒体的媒体源&#xff08;如某个摄像头&#xff09;的设备ID&#xff08;应符合6.1.2的规定&#xff09;以及相关参数&#xff08;如回放类型、下载…

Three.js——二维平面、二维圆、自定义二维图形、立方体、球体、圆柱体、圆环、扭结、多面体、文字

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

在Mac电脑下怎么部署QAnything?

在Mac电脑下部署QAnything&#xff0c;可以选择使用纯Python环境进行部署&#xff0c;这种方式不依赖GPU&#xff0c;适合在Mac等笔记本电脑上运行。以下是基于QAnything的纯Python环境安装教程的步骤[18]&#xff1a; 安装要求 Python 3.10&#xff08;建议使用Anaconda3来管…

RabbitMQ-默认读、写方式介绍

1、RabbitMQ简介 rabbitmq是一个开源的消息中间件&#xff0c;主要有以下用途&#xff0c;分别是&#xff1a; 应用解耦&#xff1a;通过使用RabbitMQ&#xff0c;不同的应用程序之间可以通过消息进行通信&#xff0c;从而降低应用程序之间的直接依赖性&#xff0c;提高系统的…

功率电感的设计步骤

文章目录 1&#xff1a;高导磁气隙&#xff08;铁氧体&#xff09;1.1设计原理1.2 设计步骤 2 铁粉芯2.1&#xff1a;设计原理2.2&#xff1a;设计步骤 TI电感设计 学习视频原链接 截图 1 截图1 截图1 截图 2 截图2 截图2 1&#xff1a;高导磁气隙&#xff08;铁氧体&#…

基于机器学习判断面部微表情发现哪些人更容易诊有帕金森病

1. 概述 帕金森病&#xff08;Parkinson’s disease&#xff0c;PD&#xff09;是一种慢性、进展性的神经退行性疾病&#xff0c;主要影响运动系统。该病症以大脑中黑质致密部多巴胺能神经元的逐渐丧失为特征&#xff0c;导致多巴胺&#xff08;一种重要的神经递质&#xff09…

【Qt】深入探索Qt窗口与对话框:从创建到管理:QDockWidget(浮动窗口)、QDialog(对话框)

文章目录 前言&#xff1a;1. 浮动窗口2. 对话框介绍2.1. 示例&#xff1a;主窗口中&#xff0c;通过点击按钮&#xff0c;弹出一个新的对话框。2.2. 创建自定义对话框2.2.1. 纯代码的方式2.2.2. 图形化界面的方式 3. 模态对话框 和 非模态对话框4. Qt 内置对话框4.1. 消息对话…

Nginx R31 doc-12-NGINX SSL Termination 安全加密

前言 大家好&#xff0c;我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的&#xff0c;可以参考我的另一个项目&#xff1a; 手写从零实现简易版 tomcat minicat nginx 系列 从零手…

Git Submodules:深入理解与应用

在大型项目或跨多个独立项目的开发中&#xff0c;代码管理往往变得复杂。Git Submodules 是 Git 提供的一个强大功能&#xff0c;允许你在一个 Git 仓库&#xff08;称为父仓库&#xff09;中嵌套另一个 Git 仓库&#xff08;称为子模块仓库&#xff09;。本文将详细介绍 Git S…

Linux/Windows下如何同时运行服务端和客户端

假设服务端和客户端程序分别为server.c和client.c注意顺序&#xff01; 先运行服务端&#xff0c;后运行客户端先结束客户端&#xff0c;后结束客户端 编译 gcc -o server server.cgcc -o server client.c运行 # 先运行服务器 ./server# 再运行客户端 ./client./表示当前目录…

Hybrid Block Storage for Efficient Cloud Volume Service——论文泛读

TOS 2023 Paper 论文阅读笔记整理 问题 传统桌面和服务器应用程序向云的迁移给底层云存储带来了高性能、高可靠性和低成本的挑战。由于这些传统应用程序的I/O模式和一致性要求&#xff0c;与采用特定编程模型和范式&#xff08;如MapReduce[22]和RDD[52]&#xff09;的云原生…

香橙派AIpro(OrangePi AIPro)开发板初测评

开发板简介 最近&#xff0c;我拿到手一款Orange Pi AI Pro 开发板&#xff0c;它是香橙派联合华为精心打造的高性能AI 开发板&#xff0c;最早发布于2023年12月&#xff0c;其搭载了昇腾AI 处理器&#xff0c;可提供8TOPS INT8 的计算能力&#xff0c;内存提供了8GB 和16GB两…

基于jeecgboot-vue3的Flowable新建流程定义(一)

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、vue3版本因为流程分类是动态的&#xff0c;不再固定了&#xff0c;所以新建的时候需要选择建立哪种流程类型的流程 代码如下&#xff1a; <!-- 选择模型的流程类型对话框 -->&…

算法提高之一个简单的整数问题2

算法提高之一个简单的整数问题2 核心思想&#xff1a;线段树 懒标记&#xff1a;add存每个子节点需要加的数pushdown&#xff1a;将懒标记向下存 同时清除本行懒标记 #include <iostream>#include <cstring>#include <algorithm>using namespace std;type…

数据结构(六)图

2024年5月26日一稿(王道P220) 6.1 图的基本概念 6.1.1 图的定义 6.2 图的存储及基本操作 6.2.1邻接矩阵法 6.2.2 邻接表

python web自动化(分布式测试Grid)

Grid介绍 Selenium Grid 是 Selenium 提供的⼀个⼯具&#xff0c;⽤于⽀持在多台计算机上并⾏运⾏测试。 它允许将测试分发到不同的机器和浏览器组合上&#xff0c;同时收集结果。 1.并⾏执⾏测试⽤例&#xff1a;在不同的机器上并⾏执⾏测试⽤例&#xff0c;从⽽加速整个测试过…

Vulhub——adminer

文章目录 一、CVE-2021-21311&#xff08;SSRF&#xff09;二、CVE-2021-43008&#xff08;远程文件读取&#xff09; 一、CVE-2021-21311&#xff08;SSRF&#xff09; Adminer是一个PHP编写的开源数据库管理工具&#xff0c;支持MySQL、MariaDB、PostgreSQL、SQLite、MS SQL…

如何在WRF模型中更好地设置这些海洋物理参数以提高模拟精度?

在WRF&#xff08;Weather Research and Forecasting&#xff09;模型中正确设置海洠物理参数是提高模拟精度的关键&#xff0c;特别是当模拟涉及到海洋和大气的相互作用时。以下是一些提高模拟精度的策略和建议&#xff1a; 1. 理解模拟的地区和目标 在进行参数设置之前&…