Django内置权限扩展案例 (2)

如上图列表页,每个用户进入系统后只能查看自己有读权限的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

查询接口权限控制

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspjzx.html