参考博客
auth模块相关的表
-
user表
- User是auth模块中维护用户信息的表,在数据库中该表被命名为auth_user. 该表继承自Abstractuser.
-
group表
- 定义用户组模型,该表只包含一个name字段和一个permissions(权限)多对多关系字段,在数据库中被命名为auth_group.
-
Permission表
- 权限表,提供表级别的权限控制,可以检查用户是否对某个表拥有增(add),改(change),删(delete)权限。
三张表的关系
从数据库生成的表来看,这三张表实现了两两多对多的关联,
- 其中user和group生成的第三张表是auth_user_groups
- group和permission生成的第三张表是auth_group_permissions
- 用户和权限生成的第三张表是auth_user_user_permissions,
下图所示
auth表.jpgUser表
在auth中user继承自AbstractUser,其中AbstractUser又继承自AbstractBaseUser和PermissionsMixin。
- AbstractBaseUser只保存了密码和登陆时间
- PermissionsMixin提供了权限相关的字段,比如:is_superuser和和组合权限表之间的关联。
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进行权限验证时,默认会有最高权限。
网友评论