python第三方库系列之二十一--python django的权限管理库

在写django代码时,如果要防止某些敏感数据被看,被修改等,我们一般对其增加权限。

在代码中如是写道:@permission_required("auth.add_permission",login_url='/login/', raise_exception=True)

@login_required

# 第一个参数是:'model.per_name'

# 第二个参数是:如果用户没登录则转向这个网址

# 第三个参数是:如果没有此权限则返回403错误


那再数据库中是如何管理权限的呢?有6张表管理权限,1张表管理app

首先,分析代码中的第一个参数:model.per_name

model在哪?在django_content_type表中。


可以看到,每一个model对应一个id,体现在代码中的是app_label。


per_name在哪?在auth_permission表中。


可以看到,每一个权限对应于一个model,也对应一个id。其中,content_type_id就是django_content_type表中model的id。体现在代码中的是codename。

所以,在代码@permission_required("auth.add_permission")中,权限管理模块首先会去查django_content_type表中app_label列是“auth”对应的id,拿到这个id后,去auth_permission表中content_type_id列找出匹配这个id的那些条目,在这些条目中再匹配codename为“add_permission”的条目,最后在这张表中匹配出一个条目,体现在这张表(auth_permission)中的id上。


为了方便管理,我们把一些权限放到一个组里,再看auth_group表中有哪些权限组:


可以看到,每一个权限组对应一个id,每一个权限组包含若干权限。


如何查看一个组对应有哪些权限?在auth_group_permissions表中:


可以看到,group_id=3的组拥有25到36的权限。这些权限都是在auth_permission表中定义。


哪些人拥有这个权限组的权限?在auth_user_groups表中。


可以看到,拥有group_id=3这个组里的权限的人user_id是1,7,11。


user_id是1,7,11的人是谁?看auth_user这张表:


可以看出,虽然没有id=1的人(或许删了),但可以看出id=7,11的人是谁。


以上是把一些权限放到一个组里,是否可以一个用户对应一个权限呢?可以,在auth_user_user_permissions表中。


可以看到,一个用户(uer_id)对应一个权限(permission_id)。


限管理的几个内建方法

用户权限

youUserObejct.permisstions = [permisstionObj,permisstionObj] ##增加用户的权限
youUserObejct.permisstions.add(permisstionObj) ## 增加用户的权限
youUserObejct.permisstions.remove(user_permisstionsObj) ##删除用户的权限
youUserObejct.permisstions.clear() ##删除用户的所有权限
youUserObejct.get_all_permisstions(obj_None) ##得到用户的所有权限
用户分组

youUserObejct.groups = [groupObj,groupObj] ##增加分组
youUserObejct.groups.add(groupObj) ##增加分组
youUserObejct.groups.remove(groupObj) ##删除分组
youUserObejct.groups.clear() #删除用户所有分组
组权限

goupObj.permisstions = [permisstionObj,permisstionObj] 
goupObj.permisstions.add(permisstionObj)
goupObj.permisstions.remove(permisstionObj)
goupObj.permisstions.clear()
权限验证

youUserObejct.has_perm(perm,obj=None) #检查用户是具有某项权限
youUserObejct.has_perms(perm,obj=None) #检查用户是具有多项权限
youUserObejct.get_group_permisstions(obj_None) ##返回用户组所有权限
密码控制

youUserObejct.check_password(raw_password) #检查密码是否正确
youUserObejct.set_password(raw_password)#重设密码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值