文章目录
- 一、权限控制模型
- 1) ACL(Access Control List,访问控制列表)
- 2) RBAC(Role-Based Access Control,基于角色的访问控制)
- 应用
- 前后台权限控制
- 实操
- 3) ABAC(Attribute-Based Access Control,基于属性的访问控制)
一、权限控制模型
1) ACL(Access Control List,访问控制列表)
将用户或组等使用者直接与对象的权限对接。
互联网,对外项目
-用户可以:
user_id:1=[刷视频,评论,收藏,开直播]
user_id:2=[刷视频]
-表,表示出权限
用户表:
id name
1 王叔
2 李四
3 张三
权限表:
id user_id permission_id
1 1 1
2 1 2
3 1 3
4 1 4
5 2 1
权限详情表:
id name url method
1 刷视频 /video/ get
2 评论 /commit/ post
3 收藏
4 开直播
-权限类:根据当前登录用户---》取出它所有权限,权限列表---》当前访问的比如是评论,如果有权限,返回True,没有权限,返回false
2) RBAC(Role-Based Access Control,基于角色的访问控制)
RBAC
是基于角色的访问控制(Role-Based Access Control
)在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。
将用户与角色对接,然后角色与对象的权限对接。
rbac权限控制:基于角色的访问控制 Role-Based Access Control
-公司内部项目
-用户属于某个角色
-角色跟权限有对应关系
- 公司内有 财务 hr 开发 总裁
-财务:张三,李四 :发工资权限,扣工资权限
-hr: 王铁锤,王五 :招员工,开除员工
-开发:张二蛋,李小红: 看代码 开发代码,删除代码
-总裁:lqz :查看公司财报
-rbac表设计
-用户表:用户和角色是 多对多
-角色表(部门,组): 角色和权限 多对多
-权限表:
-用户和权限:多对多
-总共6 张表,表示基于角色的访问控制:rbac+acl
-django的后台管理就是基于rbac控制---》auth下有些表
auth_user:# 用户表
auth_group:# 组表(角色)
auth_permission:# 权限表
auth_group_permissions # 组和权限中间表
auth_user_groups # 用户和组 中间表
auth_user_user_permissions# 用户和权限多对多中间表
-演示rbac权限控制
-创建一个超级用户 root 123456 对网站有所有权限
-创建一个用户[张三],创建一个组[测试组1],给测试组1加权限[book的增删查改]
-张三登录,发现张三有 测试组1的所有权限
-新增用户李四,没有任何组,登录后没有任何权限
-把李四放到 测试组1 ,有测试组1的所有权限:查看图书,修改图书,删除图书
-李四增加一个新增图书权限:
-新增图书权限 加入到 测试组1 张三也有这个权限,不好
-单独给李四增加一个 新增图书权限
应用
RBAC - Role-Based Access Control
Django的 Auth组件 采用的认证规则就是RBAC
1)像专门做人员权限管理的系统(CRM系统)都是公司内部使用,所以数据量都在10w一下,一般效率要求也不是很高
2)用户量极大的常规项目,会分两种用户:前台用户(三大认证) 和 后台用户(BRAC来管理)
结论:没有特殊要求的Django项目可以直接采用Auth组件的权限六表,不需要自定义六个表,也不需要断开表关系,单可能需要自定义User表
前后台权限控制
1)后台用户对各表操作,是后台项目完成的,我们可以直接借助admin后台项目(Django自带的)
2)后期也可以用xadmin框架来做后台用户权限管理
3)前台用户的权限管理如何处理
定义了一堆数据接口的视图类,不同的登录用户是否能访问这些视图类,能就代表有权限,不能就代表无权限
前台用户权限用drf框架的 三大认证
实操
models.py
class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=32)
age = models.IntegerField(null=True)
gender = models.IntegerField(default=1, choices=((1, '男'), (2, '女'), (3, '未知')))
class Book(models.Model):
name = models.CharField(max_length=32)
price = models.IntegerField()
'迁移成功后,创建一个超级用户:createsuperuser'
admin.py
from . import models
admin.site.register(models.Book)
这样就可以操作后台管理系统了
3) ABAC(Attribute-Based Access Control,基于属性的访问控制)
ABAC(Attribute-Based Access Control,基于属性的访问控制),又称为PBAC(Policy-Based Access Control,基于策略的访问控制),CBAC(Claims-Based Access Control,基于声明的访问控制)。
传统的ACL、RBAC的架构是{subject,action,object},而ABAC的架构是{subject,action,object,contextual}且为他们添加了parameter(参数)。
- subject属性:比如用户的年龄、部门、角色、威望、积分等主题属性。
- action属性:比如查看、读取、编辑、删除等行为属性。
- object属性:比如银行账户、文章、评论等对象或资源属性。
- contextual属性:比如时段、IP位置、天气等环境属性