170.分组-group、permission、user的操作
2024-08-29 22:47:44
分组
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)
<!--可以传递一个权限的列表进行判断-->
最新文章
- BUG-FREE-For Dream
- 好文mark
- stack 栈的实现
- 详解jQ的support模块
- Python开发【第十四篇】:Web框架本质
- python程序性能分析
- python之路-Day1
- UITableViewCell 单元格样式
- 网络编程之ping
- 模仿GsonConverter 写的StringConverter 解析String字符串
- POJ 1185 炮兵
- 附加数据库报错:无法打开物理文件 XXX.mdf";,操作系统错误 5:";5(拒绝访问。)";
- 【转】Appium的安装-Mac平台(命令行 dmg)
- jq实现上传头像并实时预览功能
- [国嵌笔记][013][Mini2440开发板介绍]
- 1.C和C++区别,以及const分析
- 031718-js变量、数据类型、运算符
- 关于外网无法访问阿里云主机CentOs
- icon moon追加字体
- 菜刀(代码执行)函数和命令执行函数详解及Getshell方法
热门文章
- WeChall_ Training: Stegano I (Training, Stegano)
- HDU 6186 CS Course (连续位运算)
- 初入机器学习,安装tensorflow包等问题总结
- Go语言实现:【剑指offer】滑动窗口的最大值
- 2020牛客寒假算法基础集训营4 D:子段异或
- 都闪开,不用任何游戏引擎,html也能开发格斗游戏
- 工程引用libm.a文件的sin函数后
- Jedis客户端即redis中的pipeline批量操作
- 08.JS单词整理
- 正则表达式验证IP地址(绝对正确)