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个方法:

  1. authenticate(self,username=None,password=None) 或者authenticate(self,token=None),如果通过验证,返回值是一个User对象,如果不通过验证,返回值是None。
  2. get_user(self,user_id)

关于许可,需要有以下几个方法:

  1. get_group_permissions
  2. get_all_permissions
  3. has_perm
  4. 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。具体关注接下来的博文。

posted on 2017-08-20 10:01 _潜行者 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/wangwei916797941/p/7398976.html

django(权限、认证)系统—— 基于Authentication backends定制相关推荐

  1. django用户认证系统——拓展 User 模型2

    Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...

  2. 【Django】认证系统

    目录 #. auth模块 1. 认证 authenticate() 2. 登陆 login(HttpRequest, user) 3. 注销 logout(request) 4. 认证判断 is_au ...

  3. Django的认证系统(auth)

    Django自带的用户认证 : 在开发一个网站时, 无可避免的需要设计实现网站的用户系统. 此时我们需要实现包括用户注册, 用户登录, 用户认证, 注销, 修改密码等功能. Django作为一个完美主 ...

  4. django用户认证系统——登录4

    用户已经能够在我们的网站注册了,注册就是为了登录,接下来我们为用户提供登录功能.和注册不同的是,Django 已经为我们写好了登录功能的全部代码,我们不必像之前处理注册流程那样费劲了.只需几分钟的简单 ...

  5. Django 【认证系统】auth

    本篇内容 介绍Django框架提供的auth 认证系统 方法: 方法名 备注 create_user 创建用户 authenticate 登录验证 login 记录登录状态 logout 退出用户登录 ...

  6. 氢os android8,一加8T或预装氢OS11系统,基于Android 11定制

    一加8T手机将在10月15日正式发布,目前已经是最后的倒计时,该手机的爆料和预热信息也越来越多.最近有消息表示,该手机将会预装氢OS11系统,它是基于Android 11进行深度定制,可以给用户带来相 ...

  7. django用户认证系统——注册3

    用户注册就是创建用户对象,将用户的个人信息保存到数据库里.回顾一下 Django 的 MVT 经典开发流程,对用户注册功能来说,首先创建用户模型(M),这一步我们已经完成了.编写注册视图函数(V),并 ...

  8. 计算机辅助电话调查系统,基于XML题型定制的计算机辅助电话调查系统问卷设计与实现...

    A Design and Implementation of the XML-Based Type-Customizable Questionaire of Computer Assisted Tel ...

  9. Django的身份认证系统

    1 . 在Django中使用身份认证系统 Django的身份认证系统实际上是一个app,该app叫做django.contrib.auth,它在django contrib模块下 使用时只需要在set ...

最新文章

  1. Linux命令之cal
  2. 评分卡实战中的几个问题
  3. 克里斯蒂安贝尔_克里斯蒂安贝尔和乌云背后的幸福线导演合作神秘“大片”
  4. Greenplum技术浅析
  5. foobar2000 – ELPlaylist
  6. 大智慧行情服务器文件夹,大智慧行情分析系统炒股软件常用三大菜单操作
  7. Java基础之二维数组
  8. 黑苹果系统_黑苹果系统的安装(实例一)
  9. Acwing 1227. 分巧克力
  10. Android基于讯飞AIUI的聊天Demo
  11. java word设置纸张a3,Word中进行设置A3文档纸张大小的操作技巧
  12. 麒麟V10系统-wps提示不小心挂掉了
  13. 【DB笔试面试702】在Oracle中,如何定时清理INACTIVE状态的会话?
  14. 2009年甲骨文学院教师培训
  15. 2021年中国互联网!知识付费行业发展报告!
  16. RocketMQ使用详解以及高并发系统实践问题
  17. 蝉知企业门户系统 6.2 发布,新增随机区块的功能
  18. 昆明收银系统:『免费收银软件』到底是馅饼还是陷井?免费背后的危害。
  19. 图形故障LOGO开场PR片头模板免费下载
  20. 小白入门——Python标准库和第三方库简介

热门文章

  1. opencv极坐标转换成直角坐标_媲美 PS,用 Python 制作酷炫极坐标全景图
  2. linux内核配置打开声卡,Linux设备配置之声卡配置
  3. linux执行数据库的命令,实验-shell执行数据库命令.TXT
  4. thinkphp5.0配置php版本,PHP开发-Mac搭建ThinkPHP5.0
  5. 32 usb 配置描述符_USB协议详解第4讲(USB描述符标准配置描述符)
  6. 一个三非渣本的Java校招秋招之路,搞懂这些直接来阿里入职
  7. python【蓝桥杯vip练习题库】BASIC-25 回形取数
  8. vue 关闭log_vue或react项目生产环境去掉console.log的操作
  9. java课程设计图片浏览器_java课程设计图片浏览器
  10. python 密度 语音_Python+sklearn机器学习应该了解的33个基本概念