用源码告诉你django权限管理是怎么回事

本文详细介绍了Django的权限管理系统,包括系统默认的权限本质,用户状态(available, staff, superuser)以及权限验证方法。重点解析了`permission_required`修饰符的工作原理,并探讨了如何添加自定义权限:通过Model的Meta属性,直接修改`auth_permission`表或用代码实现。Django的权限管理主要涉及`auth_permission`、`auth_user_user_permissions`和`auth_group_permissions`表,权限验证依赖`user.has_perm`方法。" 49721917,1504337,配置Lambda Probe监控Tomcat详解,"['Tomcat监控', 'Lambda Probe', '服务器管理']
摘要由CSDN通过智能技术生成

本文将从以下几方面讲述以下django的权限管理:

1、系统默认的权限系统本质

2、如何去验证权限

3、添加系统权限


系统默认的权限系统本质

下边是默认的权限系统中默认的三种用户状态:
available:指明用户是否被认为活跃的,一旦登录,就会被置于available;
staff:指明用户是否可以登录到后台管理站点:
superuser:超级用户状态,指明该用户缺省拥有所有权限。

简单介绍一下django中的django.contrib:django.contrib下是各个拥有独立功能的APP,这些app是django对那些需要重复实现的功能做的一些抽象,省得大部分开发人员进行重复开发。而django.contrib.auth就是其中的一个附件。所以要使用django的权限管理模块,你必须将django.contrib.auth 放在settings.py中的INSTALLED_APPS 集合中

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
)

django的权限认证功能是在 django.contrib.auth 中实现的,当把django.contrib.auth加入到INSTALLED_APPS中,由于权限管理中将权限跟每个单独的app中的某一个model做挂钩,而这些model类的关系需要contenttype应用进行管理,所以还需要安装django.contrib.contenttypes到INSTALLED_APPS中。再运行manage.py syncdb(1.7版本以后的可以直接运行manage.py migrate,就会在数据库中,建立如下几个表:

  • | auth_group |
  • | auth_group_permissions |
  • | auth_permission |
  • | auth_user |
  • | auth_user_groups |
  • | auth_user_user_permissions |
  • | django_content_type |

其实django的权限相关都记录在这几张表中,默认在auth_permission中,会为models中的所有表,分别创建add,delete和change三种权限,要为用户或是组赋予权限,可以直接操作auth_group_permissions或是auth_user_user_permissions表,当然更简单的方法是直接用django提供的admin后台,如下:


从上边图表可以看出,权限管理最主要的表是 

auth_permission: 标记着具体的权限项

 auth_user_user_permissions:标记着据图user对应的具体权限(不包括通过用户组获得的权限)

auth_group_permissions: 标记着具体用户组对应的具体权限

所以,用户的权限为:auth_user_user_permissions中记录的具体权限 跟 所在群对应的权限的并集


如何去验证权限呢?


详细使用方式可以 参考官方文档 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值