六,RBAC简介

2023-11-20

六,RBAC

RBAC(基于角色的权限控制 role base access control)是一种设计模式,是用来设计和管理权限相关数据的一种模型
RBAC权限数据的管理,都是重复的CRUD的操作,这里我们就不再重复的从0到1开发,我们只是把模块中需要注意的逻辑和代码讲一下,重复代码不再复述
RBAC模式:基于角色的访问控制,表结构如下:
在这里插入图片描述

6.2 需求分析

6.2.1 用户管理

用户列表
在这里插入图片描述
用户添加修改
在这里插入图片描述

6.2.2 角色管理

角色列表
在这里插入图片描述
角色修改
在这里插入图片描述

6.2.3 菜单管理

菜单列表
在这里插入图片描述
菜单修改
在这里插入图片描述
菜单不同于单表管理,是一个树状表结构管理,这里我们重点关注菜单(树状表结构的数据)的增删改查

6.3 导入权限数据管理工程

这里我们直接导入素材中的权限管理工程,因为业务比较复杂,不再从0到1开发,大家重点关注。重点模块的业务逻辑实现即可

6.4 实体类

package com.lxs.legou.security.po;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.lxs.legou.core.po.BaseEntity;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

@Data
@TableName("user_")
public class User extends BaseEntity {
   

	@TableField("user_name_")
	private String userName; //登录名
	@TableField("real_name_")
	private String realName; //真实姓名
	@TableField("password_")
	private String password;
	@TableField("salt")
    private String salt; //加密密码的盐
	@TableField("sex_")
	private String sex;
	@TableField("tel_")
	private String tel;
	@TableField("email_")
	private String email;
	@TableField("desc_")
	private String desc;
	@TableField("lock_")
	private Boolean lock; //是否锁定
	@TableField("birthday_")
	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
	@DateTimeFormat(pattern="yyyy-MM-dd")
	private Date birthday;
	@TableField("principal_")
	private Boolean principal; //是否为部门负责人,用于"常用语:直接上级"
	@TableField("dept_id_")
	private Long deptId; //部门
	@TableField("post_id_")
	private Long postId; //岗位

	@TableField(exist = false)
	private String deptName; //部门名称,用于列表显示

	@TableField(exist = false)
	private Long[] roleIds; //瞬时属性,用户的角色列表,如:[1,3,4,5]

	@TableField(exist = false)
	private String postName; //部门名称,用于列表显示
}
package com.lxs.legou.security.po;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.lxs.legou.core.po.BaseEntity;
import lombok.Data;

/**
 * @Title:
 * @Description:
 *
 * @Copyright 2019 lxs - Powered By 雪松
 * @Author: lxs
 * @Date:  2019/10/9
 * @Version V1.0
 */
@Data
@TableName("role_")
public class Role extends BaseEntity {
   

	@TableField("name_")
	private String name;
	@TableField("title_")
	private String title;
	@TableField("desc_")
	private String desc;

	@TableField(exist = false)
	private Long[] userIds; //瞬时属性,角色的用户列表,如:[1,3,4,5]
	}
package com.lxs.legou.security.po;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.lxs.legou.core.po.BaseTreeEntity;
import lombok.Data;

/**
 * @file Menu.java
 * @Copyright (C) http://www.lxs.com
 * @author lxs
 * @email lxosng77@163.com
 * @date 2018/7/13
 */
@Data
@TableName("menu_")
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Menu extends BaseTreeEntity {
   

	@TableField("path_")
	private String path;
	@TableField("name_")
	private String name;
	@TableField("component_")
	private String component;
	@TableField("hide_in_menu_")
	private Boolean hideInMenu = false; //设为true后在左侧菜单不会显示该页面选项
	@TableField("not_cache_")
	private Boolean notCache = false; //设为true后页面不会缓存
	@TableField("icon_")
	private String icon; //该页面在左侧菜单、面包屑和标签导航处显示的图标,如果是自定义图标,需要在图标名称前加下划线'_'

	@TableField(exist = false)
	private Long roleId; //查询条件,拥有查询角色的菜单
	@TableField(exist = false)
	private Long userId; //查询条件,拥有查询用户的菜单
	@TableField(exist = false)
	private boolean selected; //角色选择菜单,选中角色已有的菜单
}

这里需要重点注意Menu实体类,因为是树状结构的数据需要继承BaseTreeEntity,通过
parent_id进行自身的关联

6.5 DAO和映射文件

参考具体导入的代码,实现具体用户角色,菜单的CRUD操作,因为代码较多这里不再转帖

6.6 Service

package com.lxs.legou.security.service;

import com.lxs.legou.core.service.ICrudService;
import com.lxs.legou.security.po.Role;
import com.lxs.legou.security.po.User;

import java.util.List;

/**
 * @Title:
 * @Description: 
 *
 * @Copyright 2019 lxs - Powered By 雪松
 * @Author: lxs
 * @Date:  2019/10/9
 * @Version V1.0
 */
public interface IUserService extends ICrudService<User> {
   

    /**
     * 根据用户id查询角色
     * @param id
     * @return
     */
    public List<Role> selectRoleByUser(Long id);

    /**
     * 根据用户名,查询用户个数
     * @param userName
     * @return
     */
    public Integer findCountByUserName(String userName);

    /**
     * 根据用户名查询用户
     * @param userName
     * @return
     */
    public User getUserByUserName(String userName);

}
package com.lxs.legou.security.service;

import com.lxs.legou.core.service.ICrudService;
import com.lxs.legou.security.po.Role;
import com.lxs.legou.security.po.User;

import java.util.List;

/**
 * @Title:
 * @Description: 
 *
 * @Copyright 2019 lxs - Powered By 雪松
 * @Author: lxs
 * @Date:  2019/10/9
 * @Version V1.0
 */
public interface IRoleService extends ICrudService<Role> {
   

    /**
     * 查询角色的用户
     * @param id
     * @return
     */
    public List<User> selectUserByRole(Long id);

}
package com.lxs.legou.security.service;

import com.lxs.legou.core.service.ICrudService;
import com.lxs.legou.security.po.Menu;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Title:
 * @Description:
 *
 * @Copyright 2019 lxs - Powered By 雪松
 * @Author: lxs
 * @Date:  2019/10/9
 * @Version V1.0
 */
@Service
public interface IMenuService extends ICrudService<Menu> {
   

    /*
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

六,RBAC简介 的相关文章

  • 为什么会出现此异常 FileItemStream$ItemSkippedException?

    在 gwt Web 应用程序中 我必须发送一个文件和附加的一些参数 在服务器端 try ServletFileUpload upload new ServletFileUpload FileItemIterator iterator upl
  • 具有默认值的 Java JAX-RS 自定义参数

    假设我有这个 这只是一个示例 GET Path value address Produces application json public Response getAddress QueryParam user User user 用户是
  • 我在socket上设置了超时,发现这个值不能大于21

    我在socket上设置了超时 该值小于21秒才有效 21秒后发现超时还是21秒 public static void main String args SimpleDateFormat sdf new SimpleDateFormat yy
  • Java - 如何将特殊字符放入字符串中

    Java 似乎有很好的字符串处理能力 尽管如此 我还是遇到了最简单的问题 我需要动态字符串 它们在运行时更改 因此字符串类型不是一个好的选择 因为它们是不可变的 所以我使用字符数组 设置起来有点痛苦 但至少它们是可以修改的 我想创建一个字符
  • Hashmap并发问题

    我有一个哈希图 出于速度原因 我希望不需要锁定 假设我不介意过时的数据 同时更新它和访问它会导致任何问题吗 我的访问是获取 而不是迭代 删除是更新的一部分 是的 这会导致重大问题 一个例子是向散列映射添加值时可能发生的情况 这可能会导致表重
  • 在Java中使用命令行编译多个包

    您好 我一直在使用 IDE 但现在我需要从命令行运行和编译 问题是我有多个软件包 我试图找到答案 但没有任何效果 所以我有 src Support java files Me java files Wrapers java files 你知
  • Jackson - 反序列化嵌套 JSON

    我有一个 JSON 字符串 其格式如下 response execution status ready report cache hit true created on 2013 07 29 08 42 42 fact cache erro
  • jvm 次要版本与编译器次要版本

    当运行使用具有相同主要版本但次要版本高于 JVM 的 JDK 编译的类时 JVM 会抛出异常吗 JDK 版本并不重要 类文件格式版本 http blogs oracle com darcy entry source target class
  • 无法使用 json 架构验证器根据预定义的 yaml 文件验证查询参数

    我需要根据预定义的 yaml 文件架构验证查询参数的架构 因此我使用 json 架构验证器 验证如何失败 我正在执行以下步骤 填充参数和相应的架构 final List
  • Junit maven构建错误(maven-surefire-plugin:2.19.1:测试失败:分叉进程中出现错误)[重复]

    这个问题在这里已经有答案了 我通过引用创建了一个示例 struts 2 项目和 J unit 测试用例link http self learning java tutorial blogspot com au 2015 04 struts2
  • 哪个 Swing 布局管理器可以获得我想要的布局?

    我正在尝试按照这个模型制作一个基本的登录菜单 我决定将整个菜单放入 JPanel 中 以便在连接成功后我可以切换到另一个面板 所以我决定使用 Borderlayout 将标题放在北区 将连接按钮放在南区 我将边框布局的中心本身设置为面板 我
  • 字符串池可以包含两个具有相同值的字符串吗? [复制]

    这个问题在这里已经有答案了 字符串池可以包含两个具有相同值的字符串吗 String str abc String str1 new String abc Will the second statement with new operator
  • 如何导入 org.apache.commons.lang3.ArrayUtils;进入 Eclipse [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我如何导入 org apache commons lang3 ArrayUtils 将库添加到 Ecl
  • 如何在 Eclipse 中使用其他外部 jar 依赖项创建不可运行/不可执行的 jar

    我无法通过 Eclipse 导出向导创建普通的 jar 不可运行 不可执行 它仅创建 jar 文件 但不会导出依赖的 jar 从而在从其他类调用导出的 jar 的方法时出现错误 请帮助 非常感谢 kurellajunior的建议 它是通过使
  • 从 @JsonProperty 值获取枚举常量

    我有一个标有 JsonProperty 的枚举 用于使用 Jackson 进行 JSON 序列化 反序列化 并且希望获取给定字符串 JsonProperty 的枚举值 public enum TimeBucket JsonProperty
  • Jenkins 的代码覆盖率 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 Java 中将弯音发送到 MIDI 音序器

    我了解启动和运行 MIDI 音序器的基础知识 并且希望能够在播放过程中增加 减小序列的音高 但弯音是发送到合成器而不是音序器的消息 我尝试将音序器的接收器设置为合成器的发射器 当我发送弯音短消息时 音序器保持相同的音调 但随后合成器以新的弯
  • Hibernate HQL:将对值作为 IN 子句中的参数传递

    我面临一个问题 如何使用 IN 子句将查询中的成对值的参数传递给 HQL 例如 select id name from ABC where id reg date in x y 并且参数是不同的数据类型string id 和reg date
  • 了解 Spark 中的 DAG

    问题是我有以下 DAG 我认为当需要洗牌时 火花将工作划分为不同的阶段 考虑阶段 0 和阶段 1 有些操作不需要洗牌 那么为什么 Spark 将它们分成不同的阶段呢 我认为跨分区的实际数据移动应该发生在第 2 阶段 因为这里我们需要cogr
  • Java:由 HTTP 连接创建的等待连接线程存活时间很长

    我有一个服务器端代码 用于检查 SOAP 服务是否已启动 代码如下 String response while response length 0 try final URL url new URL DummySoapServiceURL

随机推荐

  • python数据科学(十):pandas基础—— 数据导入导出

    数据科学 十 数据格式 csv 载入数据到 Pandas 分隔 缺失 指定读取 指定列名 指定行索引 指定多层索引 逐块读取 处理 正则表达式 缺失值处理 统计次数 保存数据到磁盘 不写索引 不写列名 指定分隔符 只写一部分 pickle
  • 【ffmpeg基础】ffmpeg音频编码

    一 aac编码 输入raw音频编码为AAC ffmpeg i input wav acodec aac y input aac 通过 acodec来指定音频编码器 视频编码器为 vcodec 也可以使用 c a来指定音频编码器 ffmpeg
  • 企业架构LNMP学习笔记29

    Nginx负载均衡配置 架构分析 1 用户访问请求Nginx负载均衡服务器 2 Nginx负载均衡服务器再分发请求到Web服务器 实际配置负载均衡 只需修改作为负载均衡服务器的Nginx即可 当前架构中的server04 在客户端解析域名到
  • 华为OD机试 - 日志首次上报最多积分(Java)

    题目描述 日志采集是运维系统的的核心组件 日志是按行生成 每行记做一条 由采集系统分批上报 如果上报太频繁 会对服务端造成压力 如果上报太晚 会降低用户的体验 如果一次上报的条数太多 会导致超时失败 为此 项目组设计了如下的上报策略 每成功
  • 1.17 从0开始学习Unity游戏开发--场景切换

    前面的所有文章我们都在一个固定的游戏场景内进行开发 在最开始介绍场景这个概念的时候就已经提及 这个场景可以是一张地图 或者是一个对战房间等等 所以显然这个场景可以有多个 并且可以从一个场景切换到另外一个场景 那么在Unity中如何进行场景切
  • 基本逻辑运算

    目录 1 与 2 或 3 非 4 与非 5 或非 6 异或 7 同或 1 与 输入有零 输出为0 输入全1 输出才1 1 逻辑表达式 L A B
  • windows下安装ElasticSearch的Head插件

    es5以上版本安装head需要安装node和grunt 1 从https nodejs org en download 下载相应系统的msi 双击安装 2 安装完成用cmd进入安装目录执行 node v 可查看版本号 3 执行 npm in
  • github搭建个人博客报错分析及用法总结

    注册可以参考csdn中关于注册的相关博客 这里我想说的是 当重复注册 出现github账号被标记的情况 或者操作失误所产生的不能搭建个人博客的问题 遇到这种问题 直接联系管理员就好 一封礼貌的email就可以解决问题 1 每个人只能注册一个
  • C/C++实现输入终止则循环结束

    C while scanf d n EOF C while cin gt gt N
  • 【Windows】局域网内共享文件夹的设置方法

    引言 Windows 系统自带有文件共享功能 可实现局域网内简单的协同办公 本文简单介绍一下该功能该如何使用 需求 假设这里有两台在同一局域网的电脑 设备别名分别定义为 pc1 和 pc2 现在 pc1 桌面上建立一个名为 public 的
  • Street Workout

    sw网站 网站简介 很早就有了这个想法 但是无奈一直没有去做 终于到了这个寒假 2019 2020上 开始编码了 作为自己第一个单独开发的网站 经过了十多天的堆码 终于完成了大概的框架 虽然没有什么浏览量但是还是挺开心的 话不多说 放图 多
  • java获取指定时间前N天和后N天

    获取指定时间前N天后N天 Test public void getLastDay String time public void getLastDay SimpleDateFormat sdf new SimpleDateFormat yy
  • iPhone上查询UDID

    查找设备的 UDID 有多种方式 可以通过 iTunes 或 Finder 查找 也可以通过 Xcode 查找 这里介绍一种在线通过 iPhone 或 iPad 直接查找 UDID 的方法 1 在 iOS 设备上打开 Safari 浏览器
  • 华为OD机试 - 食堂供餐(Java)

    题目描述 某公司员工食堂以盒饭方式供餐 为将员工取餐排队时间降低为0 食堂的供餐速度必须要足够快 现在需要根据以往员工取餐的统计信息 计算出一个刚好能达成排队时间为0的最低供餐速度 即 食堂在每个单位时间内必须至少做出多少价盒饭才能满足要求
  • H5微信分享记录

    最近做H5微信分享 用的微信jssdk来做 现记录下一些过程和遇到的问题 一 公众号配置 微信官方文档 已经说明了使用步骤 公众号配置比较模糊 主要是要配置ip白名单和绑定js接口安全域名 1 检查分享接口权限是否已获得 在微信公众号的 设
  • 考虑载波和采样频率的2PSK调制 MATLAB仿真

    功能 生成psk调制信号 创建日期 2016 7 27 创建人 Alice 764499604 qq com clear all close all clc max 100 g zeros 1 max g randint 1 max 长度为
  • CentOS 7 安装 Python 3

    文章目录 前言 操作系统说明 在线安装 离线安装 环境 组件说明 组件用途说明 安装步骤 详细步骤 准备安装 搜集 下载 安装依赖 安装 Python 安装 virtualenv 异常处理 异常信息 原因分析 处理方法 小技巧 前言 推荐在
  • 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载 HTML5期末大作业 (1)

    HTML5期末大作业 动漫电影主题 电影动漫言叶之庭 4页 带音乐 HTML CSS JavaScript 期末作业HTML代码 学生网页课程设计期末作业下载 web网页设计制作成品 大学生毕设网页设计源码HTML 1 临近期末 你还在为H
  • element 中 datepicker设置,只能选中今天以及之前日期

    1 只能选择当前及以后的日期
  • 六,RBAC简介

    六 RBAC RBAC 基于角色的权限控制 role base access control 是一种设计模式 是用来设计和管理权限相关数据的一种模型 RBAC权限数据的管理 都是重复的CRUD的操作 这里我们就不再重复的从0到1开发 我们只