RBAC的介绍和使用、Casbin:权限控制、后台管理simplui的介绍和使用

RBAC是什么

RBAC模型(Role-Based Access Control:基于角色的访问控制)模型是20世纪90年代研究出来的一种新模型,但其实在20世纪70年代的多用户计算时期,这种思想就已经被提出来,直到20世纪90年代中后期,RBAC才在研究团体中得到一些重视,并先后提出了许多类型的RBAC模型。其中以美国George Mason大学信息安全技术实验室(LIST)提出的RBAC96模型最具有代表,并得到了普遍的公认。

RBAC认为权限授权的过程可以抽象地概括为:Who是否可以对What进行How的访问操作,并对这个逻辑表达式进行判断是否为True的求解过程,也即是将权限问题转换为What、How的问题,Who、What、How构成了访问权限三元组。

RBAC0、RBAC1、RBAC2、RBAC3简单介绍

RBAC0:是RBAC的核心思想。
RBAC1:是把RBAC的角色分层模型。
RBAC2:增加了RBAC的约束模型。
RBAC3:其实是RBAC2 + RBAC1。

RBAC的组成

在RBAC模型里面,有3个基础组成成分,分别是:用户、角色和权限

RBAC通过定义角色的权限,并对用户授予某个角色从而控制用户的权限,实现了用户和权限的逻辑分离(区别于ACL模型),极大地便了权限的管理

User(用户):每个用户都有唯一的UID识别,并被授予不同的角色
Role(角色):不同角色具有不同的权限
Permission(权限):访问权限
用户-角色映射:用户和角色之间是多对多的关系
角色-权限映射:角色和权限之间是多对多的关系

他们之间的关系如下图所示:
image
举例更进一步的了解
管理员和普通用户被授予不同的权限,普通用户只能去修改和查看个人信息,而不能创建创建用户和冻结用户,而管理员由于被授 予所有权限,所以可以做所有操作。

管理员和普通用户被授予不同的权限,普通用户只能去修改和查看个人信息,而不能创建创建用户和冻结用户,而管理员由于被授予所有权限,所以可以做所有操作。
image
五张表

用户表
角色表
权限表
用户和角色关联表
角色和权限关联表

django的后台管理admin就自带了rbac的权限,通过auth模块实现的,比普通rbac更高级一些
django是6张表,多了一张用户和权限的多对多关系表(一个用户可以分配多个权限,一个权限可以给多个用户)
六张表

用户表
角色表
权限表
用户和角色关联表
角色和权限关联表
用户和权限的多对多关系表

启用了admin和auth,以下6张表就迁移进去了

auth_user # 用户表
auth_group # 角色,组,部门表
auth_permission # 权限表
auth_user_groups # 用户和角色中间表
auth_group_permissions # 角色跟权限中间表
auth_user_user_permissions#用户和权限的中间表

之前很多公司写后台管理使用dajngo,使用django的admin二次开发,不用写权限了,快速加功能即可
基于RBAC来做后台管理
image
image

ACL、RBAC、ABAC(PBAC,CBAC)权限控制的介绍

ACL(Access Control List,访问控制列表)

将用户或组等使用者直接与对象的权限对接。

用户表,权限表,中间 给用户授予某些权限即可

RBAC(Role-Based Access Control,基于角色的访问控制)

将用户与角色对接,然后角色与对象的权限对接

RBAC+ACL django,公司用的比较多啊

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:权限控制

使用地址:https://casbin.org/docs/zh-CN/get-started

使用ACL

policy.py

p,alice,data1,read
p,bob,data2,write
p,lqz,book,get

s1.py

import casbin

e = casbin.Enforcer("./model.conf", "./policy.csv")

sub = "lqz"  # 想要访问资源的用户
obj = "book"  # 将要被访问的资源
act = "get"  # 用户对资源进行的操作


# 自己写acl的控制
# 当前用户id,去权限和用户表查询即可,有记录就是有权限

# 自己写rbac
# 当前用户id,找到他的角色,根据角色拿出权限,判断当前访问有没有


if e.enforce(sub, obj, act):
    # 允许alice读取data1
    print('有权限')
else:
    # 拒绝请求,抛出异常
    print('没有权限')

model.py

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

image

后台管理simplui的介绍和使用

django admin自带了权限控制(RBAC),但是是前后端混合的,我们可以二次开发,开发出公司内部的自动化运行,自动化测试,人事管理系统,订单系统。它的样式不太好看

对django进行admin美化

xadmin(不用了,过时了)

simpleui(正红)

https://simpleui.72wo.com/docs/simpleui/
快速安装

pip3 install django-simpleui

只需要在setings.py文件中配置:

INSTALLED_APPS = [
    'simpleui', # 一定要放在最上面
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
]

页面就已经发生了变化:比之前好看了许多

image
教程&指南
image
修改菜单功能
image
image
settings.py文件中的配置

import time

SIMPLEUI_CONFIG = {
    'system_keep': False,
    'menu_display': ['Simpleui', '图书管理', '权限认证', '多级菜单测试', '动态菜单测试'],  # 开启排序和过滤功能, 不填此字段为默认排序和全部显示, 空列表[] 为全部不显示.
    'dynamic': True,  # 设置是否开启动态菜单, 默认为False. 如果开启, 则会在每次用户登陆时动态展示菜单内容
    'menus': [{
        'name': 'Simpleui',
        'icon': 'fas fa-code',
        'url': 'https://gitee.com/tompeppa/simpleui',
        # 浏览器新标签中打开
        'newTab': True,
    }, {
        'app': 'app01',
        'name': '图书管理',
        'icon': 'fas fa-user-shield',
        'models': [{
            'name': 'user',
            'icon': 'fa fa-user',
            'url': 'app01/userinfo/'
        }, {
            'name': 'book',
            'icon': 'fa fa-user',
            'url': 'app01/book/'
        }, {
            'name': 'publish',
            'icon': 'fa fa-user',
            'url': 'app01/publish/'
        }]
    }, {
        'app': 'auth',
        'name': '权限认证',
        'icon': 'fas fa-user-shield',
        'models': [{
            'name': '用户',
            'icon': 'fa fa-user',
            'url': 'auth/user/'
        }]
    }, {
        # 自2021.02.01+ 支持多级菜单,models 为子菜单名
        'name': '多级菜单测试',
        'icon': 'fa fa-file',
        # 二级菜单
        'models': [{
            'name': 'Baidu',
            'icon': 'far fa-surprise',
            # 第三级菜单 ,
            'models': [
                {
                    'name': '爱奇艺',
                    'url': 'https://www.iqiyi.com/dianshiju/'
                    # 第四级就不支持了,element只支持了3级
                }, {
                    'name': '百度问答',
                    'icon': 'far fa-surprise',
                    'url': 'https://zhidao.baidu.com/'
                }
            ]
        }, {
            'name': 'zr',
            'url': 'https://www.wezoz.com',
            'icon': 'fab fa-github'
        }]
    }, {
        'name': '动态菜单测试',
        'icon': 'fa fa-desktop',
        'models': [{
            'name': time.time(),
            'url': 'http://baidu.com',
            'icon': 'far fa-surprise'
        }]
    }]
}

基于drf+vue自己写前后端分离的管理权限

https://django-vue-admin.com/document/
image

image

go语言界的

https://www.gin-vue-admin.com/
image

https://www.topgoer.com/项目/go-vue-admin.html
image

posted @ 2022-10-13 22:27  张张包~  阅读(809)  评论(0编辑  收藏  举报