Django内置权限扩展案例
当Django的内置权限无法满足需求的时候就自己扩展吧~
背景介绍
overmind项目使用了Django内置的权限系统,Django内置权限系统基于model层做控制,新的model创建后会默认新建三个权限,分别为:add、change、delete,如果给用户或组赋予delete的权限,那么用户将可以删除这个model下的所有数据。
原本overmind只管理了我们自己部门的数据库,权限设置只针对具体的功能不针对细粒度的数据库实例,例如用户A 有审核的权限,那么用户A 可以审核所有的DB,此时使用内置的权限系统就可以满足需求了,但随着系统的不断完善要接入其他部门的数据库管理,这就要求针对不同用户开放不同DB的权限了,例如A部门的用户只能操作A部门的DB,Django内置基于model的权限无法满足需求了。
实现过程
先来确定下需求:
- 保持原本的基于功能的权限控制不变,例如用户A有查询权限,B有审核权限
- 增加针对DB实例的权限控制,例如用户A只能查询特定的DB,B只能审核特定的DB
对于上边需求1用内置的权限系统已经可以实现,这里不赘述,重点看下需求2,DB信息都存放在同一个表里,不同用户能操作不同的DB,也就是需要把每一条DB信息与有权限操作的用户进行关联,为了方便操作,我们考虑把DB跟用户组关联,在用户组里的用户都有权限,而操作类型经过分析主要有两类读和写,那么需要给每个MySQL实例添加两个字段分别记录对此实例有读和写权限的用户组
如下代码在原来的model基础上添加read_groups
和write_groups
字段,DB实例跟用户组应是ManyToManyField多对多关系,一个实例可以关联多个用户组,一个用户组也可以属于多个实例
class Mysql(models.Model):
Env = (
(1, 'Dev'),
(2, 'Qa'),
(3, 'Prod'),
)
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
project_id = models.IntegerField(verbose_name='项目')
project_tmp = models.CharField(max_length=128, default='')
environment = models.IntegerField(choices=Env, verbose_name='环境')
master_host = models.GenericIPAddressField(verbose_name='master主机')
master_port = models.IntegerField(default=3306, verbose_name='master端口')
slave_host = models.GenericIPAddressField(null=True, verbose_name='slave主机')
slave_port = models.IntegerField(null=True, default=3306, verbose_name='slave端口')
database = models.CharField(max_length=64, verbose_name='数据库')
read_groups = models.ManyToManyField(Group, related_name='read', verbose_name='读权限')
write_groups = models.ManyToManyField(Group, related_name='write', verbose_name='写权限')
description = models.TextField(null=True, verbose_name='备注')
model确定了,接下来我们分三部分详细介绍下权限验证的具体实现
列表页权限控制
aaarticlea/png;base64,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" alt="">
如上图列表页,每个用户进入系统后只能查看自己有读权限的MySQL实例列表,管理员能查看所有,代码如下:
def mysql(request):
if request.method == 'GET':
if request.user.is_superuser:
_lists = Mysql.objects.all().order_by('id')
else:
# 获取登录用户的所有组
_user_groups = request.user.groups.all()
# 构造一个空的QuerySet然后合并
_lists = Mysql.objects.none()
for group in _user_groups:
_lists = _lists | group.read.all()
return render(request, 'overmind/mysql.index.html', {'request': request, 'lPage': _lists})
实现的思路是:获取登录用户的所有组,然后循环查询每个组有读取权限的数据库实例,最后把每个组有权限读的数据库实例进行合并返回
获取登录用户的所有组用到了ManyToMany的查询方法:request.user.groups.all()
最终返回的一个结果是QuerySet,所以我们需要先构造一个空的Queryset:Mysql.objects.none()
QuerySet合并不能用简单的相加,应为:QuerySet-1 | QuerySet-2
查询接口权限控制
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABMEAAAHGCAYAAAB96ZwSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAGpdSURBVHhe7Z0HmBRVukDdNWLARDAHTBgwgSBIVMkoYiIYQIKKwCiK4iqoKIoCimBEFFkXEQcVWDAgq+uKLKzioruu4WFadVUUEyYQ8X9d1dXd1dV/T9/pma7pun3O9523M1XV1dXjXL/rebdqNnlq4VOCiIiIiIiIiIhos5u0u262IGLx2Om2ZxERERERERGxGv3uu++IYIjFpjZYERERERERETF/iWCIRag2WBERERERERExf4lgiEWoNlgRERERERERMX+JYIhFqDZYERERERERETF/iWCIRag2WBERERERERExf4lgiEWoNlgRERERERERMX+JYIhFqDZYERERERERETF/iWCIRag2WBERERERERExf4lgiEWoNlgRERERERERMX8jHcFaXj5dWgy9Q9qOfljdjxhVtcGKiIiIiIiIiPkbyQjW5qqH5JheY6TB3h1kj9rHyKHH9pPjht4p7a59RD0eMWpqgxURERERERER8zdSEaztNbOkZf+JcsThvWW/LY6RBr87KubRcthmraVR3Y7SpNOl0nrEA+prEaOkNlgRERERERERMX8jE8G6DX9UerW7XfrtcpX0q32p9Np2mJy0xSBptWk3ablZJ+mxZT/pVquXNNu3h7Q44zppd/VM9TyIUVAbrIiIiIiIWDN2nPiMtL7qEWl01i3SYsQfpcP4p9TjELG4Lf4IdsUMad9tnJyz12gZteOdct9uz8n8Rv8nL3b4TF7o/IE8eMTzMqLubdJ3q0vkwlqXy4ja46TTNmdIs0POkVYDbpV2o2fp50UsYrXBioiIiIiI4dt61GzZv+sfZNu9Tpbfb9tatqrbSfZuO0JajJgpnW5dpL4GEYvToo1gba/+k7TqdbO02qevHL/lKdJps9Pk5M17yjlbDJSR21wvM3ddIUuP+l4+H7pRPrryB3myy79kylHlMn6Ph+SBPf8mI+qPk1a1T5Zjj7tQ2gy9W9pdq78PYjGqDVZERERERAzPjhOflqP6jZftdjlettzmONl8m1ay6TZtZNNt28lmtU+QWvVPkQNPuV7a37xQfT0iFp9FF8Gc5361HXibtD9ymJxbv0xG7nWL3LT/fXJ7w1ly96FPyNSD58u0wxbIgy0WyoLjV8i/z1ojd7b9k9x12liZ2Xe6PHr2M/JCr/fkw/7r5KFjF0mPWv3l2LonSavO18jxlz+kvidisakNVkRERERELLwdJzwlTYfcJnsedY7U2qKZbP77A2WLzRrJFls2lS1qtZMttukoW253mmxV+wyptW13qbvfedKk/53S/uYn1fMhYvFYVBHshLIH5Iy2k2TE7nfJ+Drl8kiD1+X5xl/Ly63Wyxsn/iofn71RVo/4SR46+xG5pscoufOCcXJx2zJptP1+cufFveXeS86T607tKxN63CSzTntKpnebK090XyKXNLhRWm5xkrTfb7B07nWnHD+KWySLzmc+l+/F48v39GNCc6X882fvWuQ7eVI9prBqgxUREREREQvorYukxWX3yG5NTpLau7aV/Zs+Jk37PS277DpEam3aVGptcaxsU6uzbFvrXNlx21FSd9tbpPbm58p2W3ST7Wt1lX0bl0mzC+6TjhOrdovkwBn/yOmIOa/m7bVz83f0nFfy9tKZ/8jbobOW5+0Vj/wjby+bnb8XzVyWt5c8vDxvy2a+lFPt965ULIoI1nbkDDmp6+1S1mCqXLfzdBlX5yEZv/NDMmnncvfWxrmHvyv/OGGdfDTwV3l/1Gq5ov210qheI+l7Yk857YhzZL+dd5I/jRooT028VObccJGM7tlFuh96pFxxUme54sTz5L4zZsnVx94tHbboJT1rl0nPxhOl/cCp0u4aYljRSARLUxusiIiIiFisfijvbvCmjxn8IM/c9o489so/lddhMdmw+wXy+822k822OlZ2OWK2HDv+e9l2676yz253yZ71z5ftarWTHbftJQfs94BcPXONXDZ+tTTd61/SoO7NUm/rIbL175vLjrU6y34tLs0rhGmxK5ta3DJVi1umanHL1GDYqoxa3DJVi1umanHLVC1umarFLVO16JVN7fewuPyPPLNmvXz0xj9l9Bs/yNdrPpFJ6nHmFsdKsLZXyWlbny/nbXOZDNr2Mhm89VVyw273y6Mtl8uLfd6Vvw78lzzRY7nc1/KvMq353+ThVm9IrwMvkPGXXSWXtb1OGu/cVAZ2bC5PTrhEnp10mVzdu4OMOLWtPDrmQpl00Zly49l95c7e0+S2do/IudteLOdte7n02fUPcuKF0/TrwRKXCIaI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" alt="">
如上图系统中有很多功能是需要根据项目、环境查询对应的DB信息的,对于此类接口也需要控制用户只能查询自己有权限读的DB实例,管理员能查看所有,代码如下:
def get_project_database(request, project, environment):
if request.method == 'GET':
_jsondata = {}
if request.user.is_superuser:
# 返回所有项目和环境匹配的DB
_lists = Mysql.objects.filter(
project_id=int(project),
environment=int(environment)
)
_jsondata = {i.id: i.database for i in _lists}
else:
# 只返回用户有权限查询的DB
_user_groups = request.user.groups.all()
for group in _user_groups:
# 循环mysql表中有read_groups权限的所有组
for mysql in group.read.all():
if mysql.project_id == int(project) and mysql.environment == int(environment):
_jsondata[mysql.id] = mysql.database
return JsonResponse(_jsondata)
实现思路与上边类似,只是多了一步根据项目和环境再进行判断
需要根据group去反查都有哪些DB实例包含了该组,这里用到了M2M的related_name属性:group.read.all()
更多关于Django ORM查询的内容可以看这篇文章Django model select的各种用法详解有详细的总结
执行操作权限控制
除了上边的两个场景之外我们还需要在执行具体的操作之前去判断是否有权限,例如执行审核操作前判断用户是否对此DB有写权限
有很多地方都需要做这个判断,所以把这个权限判断单独写个方法来处理,代码如下:
def check_permission(perm, mysql, user):
# 如果用户是超级管理员则有权限
if user.is_superuser:
return True
# 取出用户所属的所有组
_user_groups = user.groups.all()
# 取出Mysql对应权限的所有组
if perm == 'read':
_mysql_groups = mysql.read_groups.all()
if perm == 'write':
_mysql_groups = mysql.write_groups.all()
# 用户组和DB权限组取交集,有则表示有权限,否则没有权限
group_list = list(set(_user_groups).intersection(set(_mysql_groups)))
return False if len(group_list) == 0 else True
实现思路是:根据传入的第三个用户参数,来获取到用户所有的组,然后根据传入的第一个参数类型读取或写入和第二个参数DB实例来获取到有权限的所有组,然后对两个组取交集,交集不为空则表示有权限,为空则没有
M2M的.all()
取出来的结果是个list,两个list取交集的方法为:list(set(list-A).intersection(set(list-B)))
view中使用就很简单了,如下:
def query(request):
if request.method == 'POST':
postdata = request.body.decode('utf-8')
_host = get_object_or_404(Mysql, id=int(postdata.get('database')))
# 检查用户是否有DB的查询权限
if check_permission('read', _host, request.user) == False:
return JsonResponse({'state': 0, 'message': '当前用户没有查询此DB的权限'})
写在最后
- Django有第三方的基于object的权限管理模块Django-guardian,本项目没有使用主要是因为一来权限需求并不复杂,自己实现也很方便,二来个人在非必要的情况下并不喜欢引用过多第三方的包,后续升级维护都是负担
- 方案和代码不尽完美,各位有更好的方案建议或更优雅的代码写法欢迎与我交流
相关文章推荐阅读:
Django内置权限扩展案例的更多相关文章
- Django内置分页
一.django内置分页 from django.shortcuts import render from django.core.paginator import Paginator, EmptyP ...
- Django(60)Django内置User模型源码分析及自定义User
前言 Django为我们提供了内置的User模型,不需要我们再额外定义用户模型,建立用户体系了.它的完整的路径是在django.contrib.auth.models.User. User模型源码分析 ...
- JSON和Django内置序列化
JSON 什么是JSON JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * J ...
- AJAX—JSON和Django内置序列化
JSON 什么是JSON JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * J ...
- Django内置Admin
Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttyp ...
- Django 内置分页器
先导入Django内置的分页器 在商品列表页或者购物车列表页导入 在渲染list.html导入 然后在views后台渲染方法写入 打开list页面结果
- Django内置模版过滤器
Django内置过滤器总览 可以查询下表来总览Django的内置过滤器: 过滤器 说明 add 加法 addslashes 添加斜杠 capfirst 首字母大写 center 文本居中 cut 切除 ...
- Django内置模板标签
Django内置标签总览 可以查询下表来总览Django的内置标签: 标签 说明 autoescape 自动转义开关 block 块引用 comment 注释 csrf_token CSRF令牌 cy ...
- Django内置过滤器详解附代码附效果图--附全部内置过滤器帮助文档
前言 基本环境 Django版本:1.11.8 Python版本:3.6 OS: win10 x64 本文摘要 提供了常用的Django内置过滤器的详细介绍,包括过滤器的功能.语法.代码和效果示例. ...
随机推荐
- Linux Curl命令
一.简介 linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具. 二.安装 wget http://c ...
- angular模拟web API
现象:angular Cannot find module 'angular-in-memory-web-api'报错找不动“angular-in-memory-web-api”模块 解决:1.控制台 ...
- HTML中Meta标签中http-equiv属性小结
HTML中Meta标签中http-equiv的用法: <meta http-equiv="这里是参数" content="这里是参数值"> 1.Ex ...
- 根据word模板dotx文件创建word
doc = this._wordApplication.Documents.Add(@"D:\Fdsfsdsfsdfds.dotx"); 用这个会把模板的样式,文字内容都创建到新w ...
- 向jsp中引入公共文件
前沿,在网页开发中,总会存在某几个.js或者某几个.css是所有.jsp文件的公用文件,为了方便引用 我们把这些在公共的.js及.css文件放到一个.jsp文件中,只需要将这个引入所有公共.js及.c ...
- 端口转发工具lcx使用两类
lcx是一款强大的内网端口转发工具,用于将内网主机开放的内部端口映射到外网主机(有公网IP)任意端口.它是一款命令行工具,当然也可以在有权限的webshell下执行,正因如此lcx常被认为是一款黑客入 ...
- MySQL--事务隔离级别RR和RC的异同
在MySQL中,事务隔离级别RC(read commit)和RR(repeatable read)两种事务隔离级别基于多版本并发控制MVCC(multi-version concurrency con ...
- LeetCode算法题(长期更新)
1.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样 ...
- Javascript高级编程学习笔记(3)—— JS中的数据类型(1)
前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...
- Java学习笔记28(集合框架二:Iterator迭代器)
Iterator接口,翻译成中文是迭代器 迭代器的概念通俗解释: java中有很多的集合,内部有各种存储方法,取出的方式也各不相同,是否可以有一种通用的方式来获取呢? 这种方式类似for循环遍历, 通 ...