当前位置: 首页 > news >正文

微服务与Nacos概述-6

RBAC 模型

RBAC 基于角色的访问控制是实施面向企业安全策略的一种有效的访问控制方式。

基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限。这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销。

在这里插入图片描述

权限可分为三类:数据权限、操作权限和页面权限。

1、数据权限:控制账号可看到的数据范围。例如负责不同区域的人员,只能看到自己负责区域的标的,不能看到和修改其他区域的。

2、页面权限:控制账号可以看到的页面,通常系统都会有这一层权限控制。这种控制相对操作权限来说比较粗放,难以对权限进行精细管理。

3、操作权限:控制账号在页面上可以操作的按钮,通常指的是页面中的新增、删除、编辑、查询功能。没有操作权限,就只能看到页面中的数据,但是不能对数据进行操作。操作权限是比页面权限更精细一层的权限控制。

基础概念

RBAC 模型根据设计需要可分为 RBAC0、RBAC1、RBAC2、RBAC3 四种类型。其中 RBAC0 是基础,另外三种是 RBAC0 的升级。产品经理在进行权限系统设计时,可以结合实际情况来选择使用的 RBAC 模型的类型。

RBAC0 是 RBAC 模型的核心基础思想,即用户通过被赋予角色和权限进行关联。用户、角色和权限之间的两两关系均是多对多关系,即一个用户可以被赋予多个角色,一个角色可以被赋予多个用户。一个角色可以拥有多项权限,一项权限可以赋予多个角色。

RBAC1 是引入继承关系的 RBAC 模型,一个角色可以从另一个角色继承许可权,即角色具有上下级的关系。角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系允许角色间的多继承,受限继承关系则进一步要求角色继承关系是一个树结构

RBAC-2 模型在用户与角色间和角色与角色之间加入了一些规则限制。互斥角色是指各自权限可以互相制约的两个角色。且不能同时获得两个角色的使用权。规定了权限被赋予角色时或角色被赋予用户时所应遵循的强制性规则。角色互斥、基数约束、先决条件角色等

互斥角色:同一用户在两个互斥角色中只能选择一个。例如不能同时被指派给会计角色和审计员角色

先决条件角色 :指要想获得较高的权限要首先拥有低一级的权限。例如要想为用户分配角色 A,则必须先分配角色 B

基数约束:一个角色被分配的用户数量受限;一个用户可拥有的角色数目受限

运行时互斥:允许一个用户具有两个角色,但在运行中不可同时激活这两个角色。

RBAC3 统一模型:同时包含 RBAC1 和 RBAC2 的特性,既有角色层级划分,也有各种限制

表定义

在这里插入图片描述

系统的 RBAC 相关表的定义

create table if not exists tbl_users(id bigint primary key,foreign key(id) references tbl_account on delect cascade,username varchar(32) not null unique,password varchar(32) not null,salt varchar(32) comment '盐值',iter int default 6 comment '加密次数'
)engine = innodb default charset utf8 comment '登录账户信息';create table if not exists tbl_roles(id bigint primary key auto_increment comment '代理主键',name varchar(32) not null,descn varchar(255) comment '备注说明,一般在具体表中会创建一些看起来似乎没有什么用的列' 
)egine = innodb default charset utf8 comment '角色信息';

一般在管理系统中,针对普通用户的权限管理是通过菜单项是否显示来实现的,当然服务器端会针对用户的请求进行权限验证

在这里插入图片描述

无限级分类的实现方法为 自关联表

create table if not exists tbl_permissions(id bigint primary key auto_increment,parent_id bigint,foreign key(parent_id) references tbl_persimissions(id) on delete cascade
) engine = innodb default charset utf8;

一般为了简化编码,还会引入一些额外列定义,例如 level 层级、是否具有孩子节点、孩子节点个数等

create table if not exists tbl_permissions(id bigint primary key auto_increment,parent_id bigint,foreign key(parent_id) references tbl_persimissions(id) on delete cascade,title varchar(32) not null comment'菜单项名称',url varchar(64) comment '对应的URL地址',descn comment '特别重要的列,用于表示访问当前菜单所需要的权限字符串,例如user:query:1',is_child boolean default  comment '额外列,用于表示是否叶子节点,还经常添加一些其它的列'
)engine=innodb default charset utf8;create table if not exists tbl_role2permission(role_id bigint not null,permission_id bigint not null,primary key(permission_id,role_id),foreign key(permission_id) references tbl_permissions on delete cascade,foreign key(role_id) references tbl_roles on delete cascade
)engine=innodb default charset utf8;

补充:

1、具体权限是否对应到菜单取决于控制等级,如果需要控制到按钮级,则菜单和权限之间多对多关联

2、考虑具体的业务规则,是否有临时授予用户某些权限的可能,如果有则还需要在用户表和权限表之间建立多对多关联

3、是否有用户组

JSON 响应结果

Json 响应枚举类型

public enum ResponseEnum { //列举出本系统业务上的所有的可能情况SUCCESS(200, "成功" ), ERROR(500, "发生未知错误,请联系管理员" )USERNAME_OR_PASSWORD_INVALIDATE(301, "用户名或者密码错误" ), HAVE_NO_RIGHTS(302, "该角色还没有被赋权,请联系管理员" ), NO_LOGIN(303, "还没有登录" ), LOGIN_SUCCESS(304, "登录成功" ),TOKEN_INVALID(305, "token 无效,请先登录" ), TOKEN_EXPIRE(306, "token 已经超时,请重新登录" ), USER_STATUS_ERROR(307, "用户已封禁" ), private int code;private String message;
}
public class JsonResult {private int code;private Boolean success;private String message;private Object data;public JsonResult(ResponseEnum responseEnum, Object data ) {this.code = responseEnum.getCode( );this.message = responseEnum.getMessage( );this.data = data;}
}

补充说明

1、用户组设置。一般来说权限管理系统不需要设置用户组,只要当用户基数较大,角色类型过多时,为了便于管理员进行操作,才会引入用户组的概念。用户组可以理解为,将某个部门的所有人看成一个用户组,再给用户组赋予角色,这个部门的所有人就都有了用户组中角色的权限。对于给群体账号赋予权限,用户组可以提供很大的便利。同时用户组中的账号,除拥有用户组的权限外,还可以拥有指定的角色。

账号管理

账号管理模块是对系统用户的信息进行管理,在列表中要展示重要性较高的字段,便于识别账号。如编号、真实姓名、用户名、部门、角色、创建时间、账号状态等。需要能通过真实姓名和用户名来查询账号,便于管理员定位到想要操作的账号。除此之外,还需要有新建账号功能
在这里插入图片描述

新建账号功能可跳转页面或弹窗展示,页面信息除账号基本信息外,还需要对账号赋予角色
在这里插入图片描述

除了需要创建新账号外,还需要对已有的账号进行修改,账号用户的真实姓名和用户名不可修改,其他信息可修改
在这里插入图片描述

角色管理

角色即为拥有共同特征的同一类人群身份的归纳,所以在角色管理页面中,需要设置能够识别角色特征的字段。如角色名称、角色描述、创建时间、更新时间、状态等。角色数量通常不会太多,数量较少时可取消查询功能,但新建角色功能是必不可少的。
在这里插入图片描述

新建角色即是对角色进行描述并赋予权限的过程,若权限数量不多,可采用下拉列表的方式选择。若权限数量多且分类繁杂,则可采用分组列表的方式展示,让用户通过复选框勾选。为了操作简便,建议增加全选/反选功能。

在这里插入图片描述

操作栏中的编辑功能,对已有角色进行修改,角色的名称、描述、状态、权限均可修改,每次修改后在列表中记录更新时间

在这里插入图片描述

对应账号指的是配置过该角色的账号,点击后在新页面中打开,展示账号信息,包括账号的真实姓名、用户名、部门、创建时间、账号状态,并可在列表中对账号进行编辑。

在这里插入图片描述

权限管理

若系统中权限数量较多且权限类型复杂(页面权限、操作权限、数据权限),为了保证管理员使用便捷及减低出错概率,可以将权限管理页面以列表的形式展示,展示页面包含权限编号、名称、类型、描述、创建时间等。若系统权限较为简单,则可用树状图来展示权限,不需要对权限做过多描述。

相关文章:

微服务与Nacos概述-6

RBAC 模型 RBAC 基于角色的访问控制是实施面向企业安全策略的一种有效的访问控制方式。 基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当…...

不是说嵌入式是风口吗,那为什么工作还那么难找?

最近确实有很多媒体、机构渲染嵌入式可以拿高薪,这在行业内也是事实,但前提是你有足够的竞争力,真的懂嵌入式。 时至今日,能做嵌入式程序开发的人其实相当常见,尤其是随着树莓派、Arduino等开发板的普及,甚…...

【二叉树】114. 二叉树展开为链表

114. 二叉树展开为链表 解题思路 后序遍历思路将root的左子树和右子树展平将root的右子树接到左子树下方 然后将整个左子树作为右子树 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* Tree…...

docker的安装与基础使用

一.docker简介 1)什么是docker Docker是一种用于构建、打包和运行应用程序的开源平台。它基于操作系统级虚拟化技术,可以将应用程序和其依赖的库、环境等资源打包到一个可移植的容器中,形成一个轻量级、独立的可执行单元。 开发者在本地编…...

python+django+mysql高校校园外卖点餐系统--计算机毕设项目

本文的研究目标是以高校校园外卖点餐为对象,使其高校校园外卖点餐为目标,使得高校校园外卖点餐的信息化体系发展水平提高。论文的研究内容包括对个人中心、美食分类管理、用户管理、商家管理、美食信息管理、工作人员管理、安全检查管理、系统管理、订单…...

获取excel中的图片(包含wps中嵌入单元格图片)

项目中有excel导入功能,并且需要导入excel中的图片;模板如图: 已知office中插入的图片为浮动形式;如图: wps中可以插入浮动图片,也可以插入嵌入单元格图片;如图: 并且在wps嵌入单元格形式的图片可以看到使用的是公式;如图: 问题来了,如何获取图片 并且将图片与单元格进行对应 …...

Git命令详解

1 常用命令 1&#xff09;初始化本地仓库 git init <directory> 是可选的&#xff0c;如果不指定&#xff0c;将使用当前目录。 2&#xff09;克隆一个远程仓库 git clone <url> 3&#xff09;添加文件到暂存区 git add <file> 要添加当前目录中的所…...

【STM32RT-Thread零基础入门】 4. 线程介绍(理论)

文章目录 前言一、线程的概念二、线程的调度三、上下文切换四、线程的重要属性1. 线程栈2. 线程的状态3. 线程优先级4. 线程时间片5. 线程的入口函数 五、RT-Thread命令查看系统线程信息总结 前言 前文中的最后一个任务发现&#xff0c;一个main()函数很难同时实现按键功能和闪…...

css学习3(三种样式表与样式控制优先级)

1、外部样式表&#xff1a;当样式需要应用于很多页面时&#xff0c;外部样式表将是理想的选择。在使用外部样式表的情况下&#xff0c;你可以通过改变一个文件来改变整个站点的外观。每个页面使用 <link> 标签链接到样式表&#xff0c;也要放到<head>中。 2、外部…...

【JS深层解析】内存

前言 接触过 C 语言的小伙伴应该了解:C语言拥有底层最原始的内存管理办法,例如:malloc() 和 free()方法,它们被开发者用来从操作系统中分配和释放内存。 然而在JavaScript这门语言中,当我们创建了一个东西(可以被读写、传递的数据),浏览器中的 js 引擎会根据创建这个…...

第二章:25+ Python 数据操作教程(第十四节NUMPY 教程与练习)

NumPy(“Numerical Python”或“Numeric Python”的缩写)是 Python 中对数组和矩阵进行快速数学计算的最基本的软件包之一。在处理多维数据时它也非常有用。集成C、C++和FORTRAN工具是一件幸事。它还提供了许多傅里叶变换 (FT) 和线性代数函数。 为什么使用 NumPy 而不是列…...

Pycharm与Anaconda Python的开发环境搭建

目录 一&#xff1a;下载 二&#xff1a;安装python 三&#xff1a;设置Pycharm 一&#xff1a;下载 下载Anaconda&#xff1a; Anaconda | The World’s Most Popular Data Science Platform 安装好以后&#xff0c;设置一下环境变量&#xff1a; 打开命令行&#xff0c…...

2.创建小程序

创建 在开发工具中,选择小程序,点击加号 填写小程序信息,模板使用的是TS+Sass 编辑器的工作区 目录结构 项目使用的是ts的模板,目录结构和js的有一点差异,目录结构如下: miniprogram:小程序根目录 —pages:小程序页面目录 ——xxx:页面目录,一个页面对应一个目…...

XenDesktop5.6如何连接数据库

Citrix在数据库的连接方式上一直不统一&#xff0c;但是也还是有迹可循的。 经过了好长时间的下载以后&#xff0c;今天终于有时间来测试一下最新版本的XenDesktop 5 SP1&#xff0c;由于结合了其他组件和环境的需要&#xff0c;所以&#xff0c;选择了独立部署数据库&#xf…...

OAuth2.0一 Spring Security OAuth2.0

这里主讲OAuth2.0 学习OAuth2前提&#xff1a; 掌握Spring Security Spring Security学习 一 OAuth2.0介绍 OAuth&#xff08;Open Authorization&#xff09;是一个关于授权&#xff08;authorization&#xff09;的开放网络标准&#xff0c;允许用户授权第三方应用访问他们…...

【linux】kernel编译时相关报错

文章目录 1. 问题现象及解决方式1. cc1: error: code model kernel does not support PIC mode 1. 问题现象及解决方式 1. cc1: error: code model kernel does not support PIC mode 问题&#xff1a;编译module时报错 原因&#xff1a;未指定交叉编译器&#xff0c;导致默认…...

C语言 功能型API --------------------strcat()

NAME strcat, strncat - concatenate two strings 头文件 SYNOPSIS #include <string.h> 函数原型&#xff1a; char *strcat(char *dest, const char *src); 功能&#xff1a; 在字符串dest的末尾将字符串src拼接上去 #include <stdio.h> #inc…...

企业展示小程序搭建指南

如今&#xff0c;移动互联网的快速发展&#xff0c;为企业展示提供了更多元化的方式。除了传统的宣传手段&#xff0c;企业还可以借助小程序来展示自己的实力和产品。本文将为大家介绍一种简单的DIY小程序的方法&#xff0c;让企业能够快速打造自己的展示平台。 首先&#xff0…...

大模型技术实践(一)|ChatGLM2-6B基于UCloud UK8S的创新应用

近半年来&#xff0c;通过对多款主流大语言模型进行了调研&#xff0c;我们针对其训练方法和模型特点进行逐一分析&#xff0c;方便大家更加深入了解和使用大模型。本文将重点分享ChatGLM2-6B基于UCloud云平台的UK8S实践应用。 01各模型结构及特点 自从2017年6月谷歌推出Transf…...

Flink状态和状态管理

1.什么是状态 官方定义&#xff1a;当前计算流程需要依赖到之前计算的结果&#xff0c;那么之前计算的结果就是状态。 这句话还是挺好理解的&#xff0c;状态不只存在于Flink&#xff0c;也存在生活的方方面面&#xff0c;比如看到一个认识的人&#xff0c;如何识别认识呢&am…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...