本文将从以下几方面讲述以下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中记录的具体权限 跟 所在群对应的权限的并集