您的位置:首页 > 编程语言 > Python开发

[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权限机制能够
约束用户行为,控制页面的显示内容
,也能使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]

[/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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: