前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django源码学习-23-Permission

Django源码学习-23-Permission

作者头像
小团子
发布2019-08-23 12:40:32
6320
发布2019-08-23 12:40:32
举报
文章被收录于专栏:数据云团数据云团

Django源码学习-22-staff_member_required

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

代码语言:javascript
复制
from django.contrib.auth.models import Permission

权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源。

Django Authentication

1、将 'django.contrib.auth' 放在 INSTALLED_APPS 设置中,然后同步生成数据库表。

2、确认 SessionMiddleware 后面的 MIDDLEWARE 设置中包含

'django.contrib.auth.middleware.AuthenticationMiddleware' SessionMiddleware。

User对象

位于'django.contrib.auth.models'模块中有两个多对多的属性分别是groups和user_permissions。

代码语言:javascript
复制
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManage

Django 权限机制

Django 权限机制能够 约束用户行为,控制页面的显示内容 ,也能使 API 更加安全和灵活;用好权限机制,能让系统更加强大和健壮

Django 用 user, group 和 permission 完成了权限机制,这个权限机制是将属于 model 的某个 permission 赋予 user 或 group,可以理解为全局的权限,即如果用户A对数据模型(model)B 有可写权限,那么 A 能修改model B 的所有实例(objects)。group 的权限也是如此,如果为 group C 赋予 model B 的可写权限,则隶于属 group C 的所有用户,都可以修改model B 的所有实例。

Django 用 permission 对象存储权限项,每个model默认都有三个permission,即 add model, change model 和 delete model。

permission 总是与 model 对应的,如果一个 object 不是 model 的实例,无法为它创建/分配权限。

代码语言:javascript
复制
# ----------  Permission 权限 -------------from django.contrib.auth.models Permissionfrom django.contrib.auth import get_user_modelUser = get_user_model()
# 用户权限管理
# 添加用户权限,比如给 'apple' 用户添加可以给hostandgroup表增加记录的权限。u1 = User.objects.get(username='apple')p = Permission.objects.get(id=25)# 该方法接受一个Permission对象为参数,用于给用户添加权限u1.user_permissions.add(p)
# 给用户添加多条权限u1.user_permissions.add(p,p2,p3)
# 查看用户的所有权限u1.get_all_permissions()Out[8]: {u'ops01.add_hostandgroup'}
# 验证用户权限(用于校验用户是否有该权限,有返回True,没有返回 False)u1.has_perm('ops01.add_hostandgroup')
# 验证用户的权限列表,接收一个列表为参数,如果用户拥有该列表中的所有权限则返回True 否则返回Falsealist = []alist.append('ops01.add_hostandgroup')alist.append('ops01.change_hostandgroup')alist.append('ops01.delete_hostandgroup')u1.has_perms(alist)
# 删除用户权限u1.user_permissions.remove(p)

# 组权限管理
# 添加组权限g = Group.objects.get(id=1)p = Permission.objects.get(id=25)g.permissions.add(p)
# 添加多条组权限g.permissions.add(p1,p2)
# 给该组设置一个权限列表p = Permission.objects.get(id=25)p1 = Permission.objects.get(id=26)p2 = Permission.objects.get(id=27)
plist = []plist.append(p)plist.append(p1)plist.append(p2)
g.permissions = plist
# 删除组权限g.permissions.remove(p)
# 删除多条组权限g.permissions.remove(p1,p2)
# 清空组权限g.permissions.clear()
# 查看组的所有权限g.permissions.all()Out[42]: [<Permission: ops01 | user | Can add user>, <Permission: ops01 | user | Can change user>]
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档