[Python学习] Django 权限控制
2017-12-22 12:44
561 查看
本文为大家讲解Django框架里自带的权限模型,从理论到实战演练,带领大家了解Django里权限是怎么一回事。
[b]一、主要内容[/b]
1、什么是权限管理?
2、Web权限
3、Django权限机制
4、Django的权限项
5、权限应用
Permission(一)
Permission(二)
UserPermission管理(一)
UserPermission管理(二)
GroupPermission管理
权限验证(一)
权限验证(二)
权限验证(三)
权限验证(四)
二、什么是权限管理
权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源权限管理好比如钥匙,有了钥匙就能把门打开,但是权限设置是有级别之分的,假如这个系统有多个权限级别就如一间屋有多个门,想要把所有门都打开您必须要取得所有的钥匙,就如系统一样。
三、Web权限
在Web里权限管理是Web应用项目中比较关键的环节,因为浏览器是每一台计算机都已具备的,如果不建立权限管理系统,那么一个“非法用户”可以轻而易举通过浏览器访问Web应用项目中的所有功能。因此需要权限管理系统进行权限检测,让经过授权的用户可以正常合法的使用已授权的功能,而对那些未授权的非法用户拒之门外。一个好的权限管理系统应该对每一类或每一个用户,分配不同的系统操作权限,并应具有扩展性,也就是它可以加入到任何一个带有权限管理的Web应用项目中,就像构件一样可以被重复使用。同时,还要提醒开发者,开发一个Web应用项目时,应尽可能的将整个系统细化,分解为若干个子模块,最后组合成一个完整的应用。也只有这样,才容易实现为每一类或每一个用户分配不同的操作权限。
[b]四、Django权限机制[/b]
Django权限机制能够
Django用user,group和permission完成了权限机制,这个权限机制是将属于model的某个permission赋予user或group,可以理解为全局的权限,即如果用户A对数据模型(model)B有可写权限,那么A能修改modelB的所有实例(objects)。group的权限也是如此,如果为groupC赋予modelB的可写权限,则隶属于groupC的所有用户,都可以修改modelB的所有实例。
五、Django的权限项
Django用permission对象存储权限项,每个model默认都有三个permission,即addmodel,changemodel和deletemodel
permission总是与model对应的,如果一个object不是model的实例,我们无法为它创建/分配权限
六、权限应用
Permission
UserPermission
GroupPermission
权限检查
2、Permission(二)
每个permission都是django.contrib.auth.Permission类型的实例,该类型包含三个字段name,codename和content_type,
content_type反应了permission属于哪个model,
codename如上面的view_server,代码逻辑中检查权限时要用,
name是permission的描述,将permission打印到屏幕或页面时默认显示的就是name
user=User.objects.get(username="rock")
user.user_permissions=[permission_list]
user.user_permissions.add(permission,permission,…)#增加权限
user.user_permissions.remove(permission,permission,…)#删除权限
user.user_permissions.clear()#清空权限
#注:上面的permission为django.contrib.auth.Permission类型的实例
4、UserPermission管理(二)
检查用户权限用has_perm()方法:
has_perm()方法的参数,即permission的codename,但传递参数时需要加上model所属app的前缀,无论permission赋予user还是group,has_perm()方法均适用
列出用户的所有权限
[b]
[/b]
列出用户所属group的权限
GroupPermission管理
grouppermission管理逻辑与userpermission管理一致,group中使用permissions字段做权限管理:
group.permissions=[permission_list]
group.permissions.add(permission,permission,…)
group.permissions.remove(permission,permission,…)
group.permissions.clear()
当业务逻辑中涉及到权限检查时,decorator能够分离权限验证和核心的业务逻辑,使代码更简洁,逻辑更清晰。permission的decorator为permission_required
权限验证(二)
在类视图中验证
权限验证(三)
权限验证(四)
扩展阅读:
使用Django认证系统:http://python.usyiyi.cn/translate/django_182/topics/auth/default.html
交流QQ群:238757010
[b]一、主要内容[/b]
1、什么是权限管理?
2、Web权限
3、Django权限机制
4、Django的权限项
5、权限应用
Permission(一)
Permission(二)
UserPermission管理(一)
UserPermission管理(二)
GroupPermission管理
权限验证(一)
权限验证(二)
权限验证(三)
权限验证(四)
二、什么是权限管理
权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源权限管理好比如钥匙,有了钥匙就能把门打开,但是权限设置是有级别之分的,假如这个系统有多个权限级别就如一间屋有多个门,想要把所有门都打开您必须要取得所有的钥匙,就如系统一样。
三、Web权限
在Web里权限管理是Web应用项目中比较关键的环节,因为浏览器是每一台计算机都已具备的,如果不建立权限管理系统,那么一个“非法用户”可以轻而易举通过浏览器访问Web应用项目中的所有功能。因此需要权限管理系统进行权限检测,让经过授权的用户可以正常合法的使用已授权的功能,而对那些未授权的非法用户拒之门外。一个好的权限管理系统应该对每一类或每一个用户,分配不同的系统操作权限,并应具有扩展性,也就是它可以加入到任何一个带有权限管理的Web应用项目中,就像构件一样可以被重复使用。同时,还要提醒开发者,开发一个Web应用项目时,应尽可能的将整个系统细化,分解为若干个子模块,最后组合成一个完整的应用。也只有这样,才容易实现为每一类或每一个用户分配不同的操作权限。
[b]四、Django权限机制[/b]
Django权限机制能够
约束用户行为,控制页面的显示内容,也能使API更加安全和灵活;用好权限机制,能让系统更加强大和健壮
Django用user,group和permission完成了权限机制,这个权限机制是将属于model的某个permission赋予user或group,可以理解为全局的权限,即如果用户A对数据模型(model)B有可写权限,那么A能修改modelB的所有实例(objects)。group的权限也是如此,如果为groupC赋予modelB的可写权限,则隶属于groupC的所有用户,都可以修改modelB的所有实例。
五、Django的权限项
Django用permission对象存储权限项,每个model默认都有三个permission,即addmodel,changemodel和deletemodel
permission总是与model对应的,如果一个object不是model的实例,我们无法为它创建/分配权限
六、权限应用
Permission
UserPermission
GroupPermission
权限检查
1、Permission(一)
Django定义每个model后,默认都会添加该model的add,change和delete三个permission,自定义的permission可以在我们定义model时手动添加2、Permission(二)
每个permission都是django.contrib.auth.Permission类型的实例,该类型包含三个字段name,codename和content_type,
content_type反应了permission属于哪个model,
codename如上面的view_server,代码逻辑中检查权限时要用,
name是permission的描述,将permission打印到屏幕或页面时默认显示的就是name
3、UserPermission管理(一)
User对象的user_permission字段管理用户的权限user=User.objects.get(username="rock")
user.user_permissions=[permission_list]
user.user_permissions.add(permission,permission,…)#增加权限
user.user_permissions.remove(permission,permission,…)#删除权限
user.user_permissions.clear()#清空权限
#注:上面的permission为django.contrib.auth.Permission类型的实例
4、UserPermission管理(二)
检查用户权限用has_perm()方法:
has_perm()方法的参数,即permission的codename,但传递参数时需要加上model所属app的前缀,无论permission赋予user还是group,has_perm()方法均适用
列出用户的所有权限
[b]
列出用户所属group的权限
GroupPermission管理
grouppermission管理逻辑与userpermission管理一致,group中使用permissions字段做权限管理:
group.permissions=[permission_list]
group.permissions.add(permission,permission,…)
group.permissions.remove(permission,permission,…)
group.permissions.clear()
权限验证(一)
在视图中验证权限——permission_required
当业务逻辑中涉及到权限检查时,decorator能够分离权限验证和核心的业务逻辑,使代码更简洁,逻辑更清晰。permission的decorator为permission_required
权限验证(二)
在类视图中验证
权限验证(三)
views中验证
权限验证(四)
Template中的权限检查
扩展阅读:
使用Django认证系统:http://python.usyiyi.cn/translate/django_182/topics/auth/default.html
交流QQ群:238757010
相关文章推荐
- [Python学习] Django 权限控制
- 推荐学习django中权限控制的网址
- Django2.0官方文档学习-用户权限控制
- python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制
- (转)Django ====> 实战学习篇十四 处理登录和注销;控制权限
- Linux学习总结(14)——Linux权限控制
- Python框架之Django学习笔记(五)
- python学习随笔--django 上
- Python学习之Django(1)
- 【Python django学习笔记】- django安装和启动
- Python简单学习(lecture3)编程、条件控制、循环语句、迭代器和生成器
- python-django学习(一)搭建环境
- [转]Django 是一个 Python 下的 web 开发框架[学习资料]
- JAVA编程思想学习总结:第六章——访问权限控制
- django-mysql 中的金钱计算事务处理 分类: 小技巧 python学习 mysql 2015-07-27 16:52 10人阅读 评论(0) 收藏
- Java语言学习要点(001) JAVA中的权限控制符 注意的要点 protected class和成员
- 【Java EE 学习 76 上】【数据采集系统第八天】【角色授权】【用户授权】【权限的粗粒度控制】【权限的细粒度控制】
- python学习教程(六)Django框架的使用
- Django学习入门步骤 教程步骤 python
- python-django学习