Django权限系统AUTH模块

    auth模块是Django提供的标准权限管理系统,能够提供用户认证用户组权限管理。auth能够和django admin模块配合使用、快速创建网站的管理系统。只须要在django的配置文件中INSTALLED_APPS中注册‘django.contrib.auth’APP便可。数据库

1、auth模块相关的表

  • user表,User是auth模块中维护用户信息的表,在数据库中该表被命名为auth_user. 该表继承自Abstractuser.django

  • group表,定义用户组模型,该表只包含一个name字段和一个permissions(权限)多对多关系字段,在数据库中被命名为auth_group.app

  • Permission,  权限表,提供表级别的权限控制,能够检查用户是否对某个表拥有增(add),改(change),删(delete)权限。ide

来看看三张表的关系:,,
    从数据库生成的表来看,这三张表实现了两两多对多的关联,其中用户和组生成的第三张表是auth_user_groups,group和permission生成的第三张表是auth_group_permissions,用户和权限生成的第三张表是auth_user_user_permissions,以下图:网站

 

 

2、User

    在auth中user继承自AbstractUser,其中AbstractUser又继承自AbstractBaseUser和PermissionsMixin,其中AbstractBaseUser只保存了密码和登录时间,PermissionsMixin提供了权限先关的字段,好比:is_superuser和和组合权限表之间的关联。this

 

先来看下AbstractBaseUser这个表提供两个字段,和多个基本方法:spa

一、字段也叫属性code

 - password: 密码字段对象

 - last_login:   最后登录时间blog

属性方法:

   is_anonymous: 是否为匿名用户,永远返回False。  2.0版本以后会被废弃。

   is_authenticated: 是否被认证,永远返回True,。  2.0版本以后会被废弃。

二、方法

   get_username:  获取用户名,为username字段。  Return the identifying username for this User。

   set_password: 设置密码。

   check_password: 检查密码是否正确。

   get_full_name: 获取全名,一般为first_name+last_name.  须要在子类里重写这个方法。

   get_short_name: 获取短名字,须要在子类里重写这个方法。

   其中还有一些重写了数据验证的方法,好比clean等。

 

来看下PermissionsMixin这个类提供的字段和方法,官方解释以下:

"""
A mixin class that adds the fields and methods necessary to support
Django's Group and Permission model using the ModelBackend.
"""

最小权限管理的基类。

属性:

 - is_superuser : 是否为管理员。

 - groups: 与组多对多关联的字段。

 - user_permissions: 与权限关联的多对多字段,也就是是说明了为何第三张表表为auth_user_user_permissions. 表名(user)+字段名(user_permissions)

方法:

  get_group_permissions: 获取这个用户所在组中所具备的的所有权限。

  has_perm: 判断一个用户是否具备摸个权限。  经常使用。

  has_perms: 判断用户对一个权限列表是否具备权限。

  has_module_perms: 判断对app是否有权限。 

 项目中引用: 

1 from django.contrib.auth.models import User,AbstractUser

 

3、Group

   组提供的功能比较少,只包含一个name属性和natural_key(返回一个元组)方法。

 

 项目中引用:

from django.contrib.auth.models import Group

将用户添加到组中:

group.user_set.add(user)  #user为一个User对象,此处为表于表之间的多对多操做

 

 4、Permission

  权限系统提供一种方式去分配权限为用户或组, 默认是为Django Admin使用的,固然也能够被咱们本身使用,Permission只提供表级别的‘add’\'change'\'delete’权限,并且在每张边表建立后,对应的权限会自动建立。

  

 属性:

  name:   权限描述别名

  code_name: 权限描述,加上app名称后能够做为has_perm()参数

  content_type:  django用来保持app和app下表之间关系的一个表。 在django中叫作:ContentType表。

 

判断是否有权限: 

In [13]: user.has_perm('app.delete_requestreusult')   #前面为APP名称,后面为权限名

从源码中能够看出,若是是已登陆的管理员在调用has_perm进行权限验证时,默认会有最高权限。

相关文章
相关标签/搜索