170.分组-group、permission、user的操作
分组
1.Group.objects.create(group_name):创建分组。
2.group.permissions:某个分组上的权限。多对多关系。
(1)group.permissions.add():添加权限。
(2)group.permissions.remove():删除权限。
(3)group.permissions.clear():清除所有权限。
(4)user.get_group_permissions()获取用户所属组的权限。
3.user.groups.某个用户上的所有权限。多对多关系。
因为使用权限常用的相关操作,比如user.user_permissions.set(),user.user_permission.add(),或者是user.user.permissions.remove()等操作为每一个用户分别添加权限的话,就会比较麻烦。所以我们就可以根据各个职位权限的不同进行分组,并且为用户组进行添加权限。之后将用户添加到分组中就会拥有相应的组的权限了。如果我们还想为某些分组中的用户赋予一些组内其他用户不能有的权限时,就可以使用用户权限的相关操作分别为用户添加权限了。
1. 创建分组,为分组赋予权限,示例代码如下:
from django.contrib.auth.decorators import login_required, permission_required
from django.contrib.auth.models import Permission, ContentType, Group
from .models import Article
def operate_permission(request):
# 创建一个组
group = Group.objects.create(name='管理组')
<!--获取Article模型对应的表-->
content_type = ContentType.objects.get_for_model(Article)
<!--获取article表的用户对应的权限-->
permissions = Permission.objects.filter(content_type=content_type)
for permission in permissions:
print(permission)
# group.permissions.set(permissions)
<!--为用户组添加权限使用add()函数,需要注意的是,add()函数中必须传递一个个的权限,不能传递一个权限的列表-->
group.permissions.add(*permissions)
# group.save()
return HttpResponse('操作分组group: 创建分组,并且赋予权限!')
执行完成该操作之后,就可以在auth_group、auth_group_permissions表中看到我们添加的用户分组,并且为相应的分组添加的权限了。
2. 将user表中的第一个用户添加到分组中,示例代码如下:
def operate_permission(request):
# 2. 将user表中的第一个用户添加到管理分组中
user = User.objects.first()
group = Group.objects.filter(name='管理组').first()
# 将用户添加到分组中
user.groups.add(group)
# user.save()
return HttpResponse('操作分组group: 创建分组,并且赋予权限!')
执行完该操作之后,就可以在user_groups中找到添加的用户及分组了。
3. get_all_permissions()获取用户拥有的所有权限。示例代码如下:
def operate_permisssion(request):
# 3.可以通过get_all_permissions()获取用户拥有的所有权限
user = User.objects.first()
permissions = user.get_all_permissions()
for permission in permissions:
print(permission)
return HttpResponse('操作分组group: 创建分组,并且赋予权限!')
此时就可以在pycharm中的运行窗口,看到打印出的用户权限了。
login_logout.delete_article
login_logout.view_article
login_logout.change_article
login_logout.add_article
login_logout.black_article
如果你之前通过user.user_permissions.set()等操作已经为用户user赋予过权限的话,在user_permissions表中会有相应的对应关系。但是,需要注意的是,我们此时打印出的并不是通过具体的用户权限的操作为user添加的权限,而是通过查找我们的user属于哪个分组,分组又有什么样的权限,那么该user就有什么样的权限。可以将该用户在user_permissions表中对应的权限相关关系删除,之后再次运行项目,同样可以打印出user拥有的权限,此时,就可以去确定该user的权限来自分组对应的权限。
4. 可以通过has_perm()判断用户是否有该权限,示例代码如下:
def operate_permission(request):
# 4.通过has_perm()判断用户
user = User.objects.first()
if user.has_perm('login_logout.add_article'):
print("您拥有该权限")
else:
print("不好意思,您没有权限")
return HttpResponse('操作分组group: 创建分组,并且赋予权限!')
5. 同样判断用户是否登录还可以使用permissions_required装饰器判断,示例代码如下:
@permission_required(['login_logout.view_user','login_logout.add_user'], login_url= '/login_logout/', raise_exception=True)
<!--可以传递一个权限的列表进行判断-->
170.分组-group、permission、user的操作的更多相关文章
- MySQL数据分组Group By 和 Having
现有以下的学生信息表: 若果现在想计算每个班的平均年龄,使用where的操作如下: SELECT Cno AS 班级, AVG(Sage) AS 平均年龄 FROM stu ; 这样的话,有多少个班就 ...
- 第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; Select 列 into 新表;字符串函数;日期函数
第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; ...
- TFS二次开发10——分组(Group)和成员(Member)
TFS SDK 10 ——分组(Group)和成员(Member) 这篇来介绍怎样读取TFS服务器上的用户信息 首先TFS默认有如下分组(Group): SharePoint Web Applicat ...
- LeetCode 49: 字母异位词分组 Group Anagrams
LeetCode 49: 字母异位词分组 Group Anagrams 题目: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. Given an array o ...
- Oracle 表分组 group by和模糊查询like
分组group by写法 select 字段名 from 表名 group by 字段名 查询这个字段名里的种类分组后可以加聚合函数select 字段名,聚合函数 from 表名 group by 字 ...
- mysql分组GROUP BY常用sql
数据分组 GROUP BY GROUP BY可以根据一个或多个字段进行分组. 比如,根据prod_id分组: SELECT prod_id ,user_id FROM products GROUP B ...
- 【SQL】分组数据,过滤分组-group by , having
学习笔记,原文来自http://blog.csdn.net/robinjwong/article/details/24845125 创建分组 - GROUP BY 分组是在SELECT语句的GROUP ...
- sql-多表查询JOIN与分组GROUP BY
一.内部连接:两个表的关系是平等的,可以从两个表中获取数据.用ON表示连接条件 SELECT A.a,B.b FROM At AS A INNER JOINT Bt AS B ON A.m=B.n ...
- LINQ按多列分组(Group By)并计算总和(Sum) (转载)
来源:https://codedefault.com/2018/group-by-multiple-columns-and-sum-in-csharp .NET[C#]LINQ按多列分组(Group ...
随机推荐
- CCF_ 201403-3 _命令行选项
不要怀疑,这题跟CCF_201604-3_路径解析一样恶心,很多中情况,要仔细读题,注意细节. 写的比较乱. #include<iostream> #include<cstdio&g ...
- Spring 事件:Application Event
Spring Application Event Spring 的事件(Application Event)为 Bean 与 Bean 之间的消息通信提供了支持.当一个 Bean 处理完一个任务之后, ...
- bootstrap 图片类 和 按钮类 部分
bootstrap框架,来自 Twitter,基于 html ,css ,js.简介灵活. 首先引入 bootstrap.js bootstrap.css 及 jquery.js 这里不考虑 ...
- 动手学习Pytorch(4)--过拟合欠拟合及其解决方案
过拟合.欠拟合及其解决方案 过拟合.欠拟合的概念 权重衰减 丢弃法 模型选择.过拟合和欠拟合 训练误差和泛化误差 在解释上述现象之前,我们需要区分训练误差(training error)和泛化误差 ...
- Python实现IOC控制反转
思路: 用一个字典存储beanName和资源 初始化时先将beanName和资源注册到字典中 然后用一个Dscriptor类根据beanName动态请求资源,从而实现控制反转 # -*- coding ...
- Java范型学习笔记
对于范型的使用或者说印象只有集合,其他地方即使使用过也不知道,反正就是只停留在List<E> Map<K, V>,最近刚好闲来无事,就找找资料学习一下:下列为个人学习总结,欢迎 ...
- 从linux命令行分享文件:bashupload.com和transfer.sh
背景 传输文件是一个常见的需求,简单的做法是通过即时通讯工具,邮件,网盘完成. 但当分享或接收的一端为远程服务器,只有命令行可以操作时,一个能支持在命令行完成分享和下载的工具,就会省下不少麻烦. 下面 ...
- 20191223-python学习第三天
1.运算符补充 (1)in 与 not in 学习 (2)优先级 >小于 ,<小于,计算运算关系优先级 > not > and > or 2.charm自动生成文件头部 ...
- Doug Hennig的自定义 DataEnvironment 和 CursorAdapter 类文件 -- SFDataClasses
Doug Hennig的自定义 DataEnvironment 和 CursorAdapter 类文件 -- SFDataClasses.vcx,其中包括:SFCursorAdapter 和 SFDa ...
- logstash 安装插件multiline
一.安装multiline 在使用elk 传输记录 java 日志时,如下 一个java的报错 在elk中会按每一行 产生多条记录,不方便查阅 这里修改配置文件 使用 multiline 插件 ...