一 RBAC的介绍和使用
RBAC(Role-Based-Access-Control)基于角色的访问控制。
在RBAC中,权限与角色相关联,用户通过与角色绑定,就拥有了相应的权限。
这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。
RBAC权限管理的模式,适用于公司内部管理系统,不适用于互联网用户系统。
例如:
用户数据:用户表user
角色表:role表
权限:permission表
# user
id name password
1 张三 xxx
2 李四 yyy
3 王二 zzz
# role
id role_name
1 超级管理员
2 管理员
3 普通用户
# permission
id per_name
1 新增用户
2 修改密码
3 修改头像
4 锁定账户
# 这三个表之间的关系是:
权限表是权限的一条条记录,与角色表之间是多对多关系,一条权限记录可以有多个角色记录,一条角色记录也可以有多个权限记录,所以需要创建关系表。
角色表和用户表之间也是多对多关系,所以也需要创建关系表。
# 角色和权限的第三张关系表
# role_permission
id role_id permission_id
1 1 1
2 1 2
3 1 3
4 1 4
5 2 1
6 2 2
7 2 3
8 3 2
9 3 3
# 用户和角色的第三张关系表
# user_role
id user_id permission_id
1 1 1
2 2 2
3 3 3
这样就有了五张表,不同的用户有不同的角色,根据角色来赋予权限。
在django的后台管理admin就提供了RBAC模式,通过authentic模块实现的,比普通的RBAC高级一点,因为多了一个用户和权限关系的表。
auth_user # 用户表
auth_group # 角色表(部门,组)
auth_permission # 权限表
auth_group_permissions # 角色和权限的关系表
auth_user_groups # 用户和角色的关系表
auth_user_user_permissions # 用户和权限的关系表
django-admin权限控制使用
-
models.py中创建表模型 class Book(models.Model):
title = models.CharField(max_length=32, verbose_name='书名')
price = models.IntegerField(verbose_name='书价')
publish = models.ForeignKey(to='Publish', on_delete=models.SET_NULL, null=True, verbose_name='出版社外键')
def __str__(self):
return self.title
class Meta:
verbose_name_plural = '图书表'
class Publish(models.Model):
name = models.CharField(max_length=32, verbose_name='出版社表')
addr = models.CharField(max_length=32, verbose_name='出版社地址')
def __str__(self):
return self.name
class Meta:
verbose_name_plural = '出版社表'
-
在admin.py中注册模型表 from .models import *
admin.site.register(Book)
admin.site.register(Publish)
-
迁移数据库,并创建超级用户。 迁移完后会产生关于auth的六张表。 -
用超级管理员登录admin后台。 超级管理员拥有所有权限,创建用户、图书的增删改查、出版社的增删改查等等。 -
普通用户登录 只有超级管理员赋予的权限。
二 ACL、RBAC、ABAC(PBAC,CBAC)权限控制的介绍
2.1 ACL(Access Control List,访问控制列表)
将用户或组等使用者直接与对象的权限对接。
用户表,权限表,中间 给用户授予某些权限即可
2.2 RBAC(Role-Based Access Control,基于角色的访问控制)
将用户与角色对接,然后角色与对象的权限对接
2.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位置、天气等环境属性。
三 casbin使用
一个支持如ACL, RBAC, ABAC等访问模型。
四 后台管理simplui的介绍和使用
|