django(权限、认证)系统—— 基于Authentication backends定制
在这篇文章中,我们进行最后关于DjangoPermission系统的探讨,来谈谈关于Permission系统后台接口和扩展后台接口的开发。
Django实现的这套permission体系,在底层被抽象为authentication backends。Django auth backends的默认的内置的实现,就是我们前4篇blog所描述的,基于三个数据库模型User,Permission,Group。在实际开发中,很有可能我们的用户标示或者是密码并非存在于User表中,比如说存放在LDAP中,再比如使用第三方的OAuth。这就需要我们能够对已有的权限系统进行扩展,而不是局限于基于数据库表的权限控制,这也是Django将其抽象为可以定制的authentication backends的缘由。
Django中,所有的authentication backends,可以通过配置settings中的一个变量AUTHENTICATION_BACKENDS来做到,这个变量的类型是元组(Tuple),默认Django的设置是:
AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
Backend可以是普通的python类,但是关于登陆校验需要具有以下规定的2个方法:
- authenticate(self,username=None,password=None) 或者authenticate(self,token=None),如果通过验证,返回值是一个User对象,如果不通过验证,返回值是None。
- get_user(self,user_id)
关于许可,需要有以下几个方法:
- get_group_permissions
- get_all_permissions
- has_perm
- has_module_perms
这两类方法的具体使用不是很相同,关于登陆校验的authenticate,Django在使用他们的时候,会遍历所有的auth backends,一旦发现有一个backend校验通过,即返回User对象,那么将会停止下面backend的校验,并且将校验成功的backend绑定在该用户上放入session中,此后如果再次调用该方法,那么将会使用session中的backend进行校验,而不再遍历所有backend了。
而关于许可,一个用户所拥有的perm是所有backends所返回的perm。
最后,我们要提醒一下,虽然has_perm的最后一个参数是一个obj,看上去像是支持每个对象级别的权限校验,而事实上,Django只是在架构和接口上面支持了对象级别的权限校验,但是并没有实现。这意味着,所有关于对象权限的校验方法返回值都是False或者是空列表。因此,如果需要实现Object级别的权限控制,需要自己写或者使用第三方扩展来实现。具体点就是将会接受obj和user_obj,对于每一个auth方法会返回一个关于该用户针对于该对象的一个权限控制结果。
总结
以上的5篇文章,详细阐述说明了Django的简洁而强大的权限认证系统,结合django admin site,我们可以很容易的进行权限的定义,分配,使用。
通过User,Permission,Group这三个模型,和Django的Authentication backends。实现了这套Django的简洁版本权限认证。并且通过TemplateProcessor和RequestContext在模版系统中有着方便的使用,让我们可以在界面中通过权限来控制提供给某个用户的显示。
但是,美中不足的是Django并没有实现对象级别的权限控制。比方说在论坛系统中,只有管理员和帖子的发布者才有对该帖子对象的修改权限,这就是对象级别而非模型级别的权限控制。因此,我们需要自己实现对象级别的权限控制。依靠我们对django核心auth系统的掌握,我们可以很容易的开发或者引用第三方提供的Object level auth。具体关注接下来的博文。
转载于:https://www.cnblogs.com/wangwei916797941/p/7398976.html
django(权限、认证)系统—— 基于Authentication backends定制相关推荐
- django用户认证系统——拓展 User 模型2
Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...
- 【Django】认证系统
目录 #. auth模块 1. 认证 authenticate() 2. 登陆 login(HttpRequest, user) 3. 注销 logout(request) 4. 认证判断 is_au ...
- Django的认证系统(auth)
Django自带的用户认证 : 在开发一个网站时, 无可避免的需要设计实现网站的用户系统. 此时我们需要实现包括用户注册, 用户登录, 用户认证, 注销, 修改密码等功能. Django作为一个完美主 ...
- django用户认证系统——登录4
用户已经能够在我们的网站注册了,注册就是为了登录,接下来我们为用户提供登录功能.和注册不同的是,Django 已经为我们写好了登录功能的全部代码,我们不必像之前处理注册流程那样费劲了.只需几分钟的简单 ...
- Django 【认证系统】auth
本篇内容 介绍Django框架提供的auth 认证系统 方法: 方法名 备注 create_user 创建用户 authenticate 登录验证 login 记录登录状态 logout 退出用户登录 ...
- 氢os android8,一加8T或预装氢OS11系统,基于Android 11定制
一加8T手机将在10月15日正式发布,目前已经是最后的倒计时,该手机的爆料和预热信息也越来越多.最近有消息表示,该手机将会预装氢OS11系统,它是基于Android 11进行深度定制,可以给用户带来相 ...
- django用户认证系统——注册3
用户注册就是创建用户对象,将用户的个人信息保存到数据库里.回顾一下 Django 的 MVT 经典开发流程,对用户注册功能来说,首先创建用户模型(M),这一步我们已经完成了.编写注册视图函数(V),并 ...
- 计算机辅助电话调查系统,基于XML题型定制的计算机辅助电话调查系统问卷设计与实现...
A Design and Implementation of the XML-Based Type-Customizable Questionaire of Computer Assisted Tel ...
- Django的身份认证系统
1 . 在Django中使用身份认证系统 Django的身份认证系统实际上是一个app,该app叫做django.contrib.auth,它在django contrib模块下 使用时只需要在set ...
最新文章
- Linux命令之cal
- 评分卡实战中的几个问题
- 克里斯蒂安贝尔_克里斯蒂安贝尔和乌云背后的幸福线导演合作神秘“大片”
- Greenplum技术浅析
- foobar2000 – ELPlaylist
- 大智慧行情服务器文件夹,大智慧行情分析系统炒股软件常用三大菜单操作
- Java基础之二维数组
- 黑苹果系统_黑苹果系统的安装(实例一)
- Acwing 1227. 分巧克力
- Android基于讯飞AIUI的聊天Demo
- java word设置纸张a3,Word中进行设置A3文档纸张大小的操作技巧
- 麒麟V10系统-wps提示不小心挂掉了
- 【DB笔试面试702】在Oracle中,如何定时清理INACTIVE状态的会话?
- 2009年甲骨文学院教师培训
- 2021年中国互联网!知识付费行业发展报告!
- RocketMQ使用详解以及高并发系统实践问题
- 蝉知企业门户系统 6.2 发布,新增随机区块的功能
- 昆明收银系统:『免费收银软件』到底是馅饼还是陷井?免费背后的危害。
- 图形故障LOGO开场PR片头模板免费下载
- 小白入门——Python标准库和第三方库简介
热门文章
- opencv极坐标转换成直角坐标_媲美 PS,用 Python 制作酷炫极坐标全景图
- linux内核配置打开声卡,Linux设备配置之声卡配置
- linux执行数据库的命令,实验-shell执行数据库命令.TXT
- thinkphp5.0配置php版本,PHP开发-Mac搭建ThinkPHP5.0
- 32 usb 配置描述符_USB协议详解第4讲(USB描述符标准配置描述符)
- 一个三非渣本的Java校招秋招之路,搞懂这些直接来阿里入职
- python【蓝桥杯vip练习题库】BASIC-25 回形取数
- vue 关闭log_vue或react项目生产环境去掉console.log的操作
- java课程设计图片浏览器_java课程设计图片浏览器
- python 密度 语音_Python+sklearn机器学习应该了解的33个基本概念