Django权限系统AUTH模块

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

一、auth模块相关的表

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

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

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

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

 

 

二、User

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

 

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

1、字段也叫属性

 - password: 密码字段

 - last_login:   最后登陆时间

属性方法:

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

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

2、方法

   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

 

三、Group

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

 

 项目中引用:
from django.contrib.auth.models import Group
将用户添加到组中:
group.user_set.add(user)  #user为一个User对象,此处为表于表之间的多对多操作

 

 四、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进行权限验证时,默认会有最高权限。

 

转载于:https://www.cnblogs.com/busyboy-ws/p/9531192.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值