Django学习手册 - 权限管理(一)
权限管理原理:
不同角色拥有不同的角色权限,所以能否访问的页面也就不相同.
通过控制URL使用户访问到不同的URL,从而达到权限控制的目的.
设计权限数据库
权限管理

from django.db import models # Create your models here. class Userinfo(models.Model):
uname = models.CharField(max_length=30)
pwd = models.CharField(max_length=30) class Meta:
verbose_name_plural = '用户表' def __str__(self):
return self.uname class Juese(models.Model):
jsm = models.CharField(max_length=30) class Meta:
verbose_name_plural = '角色表' def __str__(self):
return self.jsm class UtoJ(models.Model):
u = models.ForeignKey(Userinfo,on_delete=models.CASCADE)
j = models.ForeignKey(Juese,on_delete=models.CASCADE) class Meta:
verbose_name_plural = '用户角色表' def __str__(self):
return "%s - %s "%(self.u.uname,self.j.jsm) class Quanxian(models.Model):
qxname = models.CharField(max_length=30)
url = models.CharField(max_length=30)
menu = models.ForeignKey('Menu',on_delete=models.CASCADE,null=True,blank=True) class Meta:
verbose_name_plural = '职能表' def __str__(self):
return "%s - %s "%(self.qxname,self.url) class Zsgc(models.Model):
zsgc = models.CharField(max_length=30)
url = models.CharField(max_length=30) class Meta:
verbose_name_plural = 'ZSGC表' def __str__(self):
return self.zsgc class Qtoz(models.Model):
q = models.ForeignKey(Quanxian,on_delete=models.CASCADE)
z = models.ForeignKey(Zsgc, on_delete=models.CASCADE)
class Meta:
verbose_name_plural = '权限表' def __str__(self):
return "%s - %s - %s/?p=%s"% (self.q.qxname,self.z.zsgc,self.q.url,self.z.url) class JtoQtoZ(models.Model):
j = models.ForeignKey(Juese, on_delete=models.CASCADE)
qz = models.ForeignKey(Qtoz, on_delete=models.CASCADE) class Meta:
verbose_name_plural = '角色权限表' def __str__(self):
return "%s >>> %s"% (self.j.jsm,self.qz) class Menu(models.Model):
Mname = models.CharField(max_length=32)
zgl = models.ForeignKey('self',related_name='z', on_delete=models.CASCADE,null=True,blank=True)
class Meta:
verbose_name_plural = '菜单栏' def __str__(self):
return self.Mname
获取用户信息、用户权限信息、菜单信息
# 取用户角色 uname juese
data = models.Juese.objects.filter(utoj__u__uname='xmei') # 获取当前用户角色的权限 uname_juese quanxian_zsgc
# 数据去重 (.values(字段).distinct()) 排除不必要的数据 .exclude(qz__q__menu__isnull=True)
data2 = models.JtoQtoZ.objects.filter(j__in=data).exclude(qz__q__menu__isnull=True).values('qz__q__qxname', 'qz__q__url','qz__q__menu').distinct()
# 获得菜单数据
data3 = models.Menu.objects.values("id", 'Mname', 'zgl').all()
Django学习手册 - 权限管理(一)的更多相关文章
- Django学习手册 - 权限管理(二)
从数据库获取数据后,对数据进行清洗 目标: 数据1,存放至session 中的数据 数据2,显示至前端的菜单数据 清洗数据: 1.session存放的数据:(menu_leaf_dict) 2.前端菜 ...
- MongoDB学习笔记—权限管理
1.MongoDB权限介绍 a 上篇文章中,我们在Linux下配置了MongoDB环境并且将其设置为服务随机器启动而启动,那么接下来这篇文章我们就来简单说一下MongoDB下对登录用户权限的管理. b ...
- Django实现Rbac权限管理
权限管理 权限管理是根据不同的用户有相应的权限功能,通常用到的权限管理理念Rbac. Rbac 基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问, ...
- 十二、基于Django实现RBAC权限管理
一.RBAC概述 RBAC(Role-Based Access Control,基于角色的访问控制),通过角色绑定权限,然后给用户划分角色. 从企业的角度来说,基本上是按照角色来划分职能.比如,CEO ...
- django 用户与权限管理
django中使用content_type表进行存储app与model的关系.在permission表中设立了name(权限的名字,中英文均可)content_type_id(与content_typ ...
- linux 学习8 权限管理
第八章 权限管理 8.1 ACL权限 8.2 文件特殊权限 8.3 文件系统属性chattr权限 8.4 系统命令sudo权限 8.1 ACL权限 ACL权限简介与开启 查看与设定ACL权限 最大有效 ...
- [转]Oracle学习笔记——权限管理
本文转自:http://www.cnblogs.com/whgw/archive/2011/10/30.html 一.系统的默认用户 1)sys用户是超级用户,具有最高权限,具有sysdba角色,有c ...
- Shiro基础学习(一)—权限管理
一.基本概念 1.权限管理 只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源. 权限管理 ...
- django学习-22.admi管理后台页面的文案展示等相关配置
目录结果 1.前言 2.完整的操作步骤 2.1.第一步:对[settings.py]里的相关常量的值做如下修改 2.2.第二步:重启django项目[helloworld]的服务 2.3.第三步:重新 ...
随机推荐
- testng+maven一些坑
1. [TestNGContentHandler] [WARN] It is strongly recommended to add "<!DOCTYPE suite SYSTEM & ...
- Luogu P2463 [SDOI2008]Sandy的卡片
题目链接 \(Click\) \(Here\) 真的好麻烦啊..事实证明,理解是理解,一定要认认真真把板子打牢,不然调锅的时候真的会很痛苦..(最好是八分钟能无脑把\(SA\)码对的程度\(QAQ\) ...
- socket编程 ------ UDP服务器
void vLANcommunication( void *pvParameters ) { int32 listenfd; do{ listenfd = socket(AF_INET, SOCK_D ...
- Python三十个常见的脚本汇总
1.冒泡排序 2.计算x的n次方的方法 这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发.爬虫.数据分析.数据可视化.机器学习等.送给正在 ...
- 使用Redis模拟简单分布式锁,解决单点故障的问题
需求描述: 最近做一个项目,项目中有一个功能,每天定时(凌晨1点)从数据库中获取需要爬虫的URL,并发送到对应的队列中,然后客户端监听对应的队列,然后执行任务.如果同时部署多个定时任务节点的话,每个节 ...
- 网络编程基础【day10】:我是一个线程(四)
本节内容 1.第一回 初生牛犊 2.第二回 渐入佳境 3.第三回 虎口脱险 4.第四回 江湖再见 第一回 初生牛犊 我是一个线程,我一出生就被编了个号:0x3704,然后被领到一个昏暗的屋子里,在这里 ...
- No Spring WebApplicationInitializer types detected on classpath
情况: 1.使用 Tomcat 8 Maven 插件 2.使用 ServletContainerInitializer 模式配置 Spring 配置好后发现只会加载 spring-web 配置的 We ...
- [Android] Android 使用 Greendao 操作 db sqlite(1)-- 直接在MainActivity中调用
继续接上文: Android 使用 Greendao 操作 db sqlite 布局文件: activity_test_green.xml <?xml version="1.0&quo ...
- [Android] Android 去掉界面标题栏的方法
Android 去掉界面标题栏的方法 这个首先要区分当前Activity 是继承了 Activity 类 ,还是 AppCompatActivity 类 情况一:创建的activity默认继承了App ...
- git 提交解决冲突(转载)
转载 git 提交解决冲突 http://www.cnblogs.com/qinbb/p/5972308.html 一:git命令在提交代码前,没有pull拉最新的代码,因此再次提交出现了冲突. ...