范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

从零开始码后台管理系统权限表设计

  前后台可以正式接通以后,我们就可以设计基础的几个数据库表了,菜单表、角色表、用户表、角色菜单表和用户角色表,有这5个表我们就可以搞定用户权限。
  因为要开始涉及数据库操作,每个表的单表操作我们都会创建Controller、Service、Entity、Mapper、MapperXML,我们先来新建数据库表结构,先建立最基础的表结构,后续有需要再完善,毕竟使用了MybatisPlus,改变结构之后只需要在实体类加属性就好了。
  用户表:CREATE TABLE `sys_user` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `username` varchar(20) NOT NULL COMMENT "用户名",   `password` varchar(200) NOT NULL COMMENT "密码",   `salt` varchar(10) DEFAULT NULL COMMENT "盐",   `name` varchar(64) DEFAULT NULL COMMENT "姓名",   `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间",   `create_by` int(11) DEFAULT NULL COMMENT "创建者",   `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "修改时间",   `update_by` int(11) DEFAULT NULL COMMENT "修改人",   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT="用户账户";
  角色表:CREATE TABLE `sys_role` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `label` varchar(200) DEFAULT NULL COMMENT "角色名称",   `alias` varchar(100) DEFAULT NULL COMMENT "角色别名",   `sort` int(11) DEFAULT "0" COMMENT "排序",   `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间",   `create_by` int(11) DEFAULT NULL COMMENT "创建者",   `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "修改时间",   `update_by` int(11) DEFAULT NULL COMMENT "修改人",   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT="角色表";
  用户角色表:CREATE TABLE `sys_user_role` (   `id` int(11) DEFAULT NULL,   `user_id` int(11) DEFAULT NULL,   `role_id` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT="用户角色表";
  菜单表:CREATE TABLE `sys_menu` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `parent_id` int(11) DEFAULT NULL COMMENT "上级菜单",   `title` varchar(200) DEFAULT NULL COMMENT "显示名称",   `type` varchar(10) DEFAULT NULL COMMENT "类型",   `name` varchar(100) DEFAULT NULL COMMENT "别名",   `icon` varchar(100) DEFAULT NULL COMMENT "菜单图标",   `path` varchar(100) DEFAULT NULL COMMENT "路由地址",   `redirect` varchar(200) DEFAULT NULL COMMENT "重定向",   `active` varchar(200) DEFAULT NULL COMMENT "菜单高亮",   `component` varchar(100) DEFAULT NULL COMMENT "视图",   `color` varchar(10) DEFAULT NULL COMMENT "颜色",   `hidden` bit(1) DEFAULT b"0" COMMENT "隐藏菜单",   `hidden_breadcrumb` bit(1) DEFAULT b"0" COMMENT "隐藏面包屑",   `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间",   `create_by` int(11) DEFAULT NULL COMMENT "创建者",   `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "修改时间",   `update_by` int(11) DEFAULT NULL COMMENT "修改人",   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT="菜单表";
  角色菜单表:CREATE TABLE `sys_role_menu` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `role_id` int(11) DEFAULT NULL COMMENT "角色ID",   `menu_id` int(11) DEFAULT NULL COMMENT "菜单ID",   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT="角色菜单表";
  在用户表中插入超管账号:INSERT INTO `demo`.`sys_user` (`id`, `username`, `password`, `salt`, `name`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES (1, "admin", "admin", "123456", "超级管理员", DEFAULT, NULL, DEFAULT, NULL)
  引入Lombok方便写实体类     org.projectlombok     lombok     1.18.22 
  新建用户相关类:@Data @TableName("sys_user") public class SysUserEntity {     @TableId     private Long id;      private String username;      private String password;      private String salt;      private String name;      private LocalDateTime createTime;      private Long createBy;      private LocalDateTime updateTime;      private Long updateBy; }  @Mapper public interface SysUserMapper extends BaseMapper { }  public interface SysUserService extends IService {     /**      * 根据用户名获取用户信息      * @param username      * @return      */     SysUserEntity getUserByUserName(String username); }  /**  * @program:  * @description: 用户服务层  * @author:  * @create: 2022-01-27 16:58  **/ @Service("sysUserService") public class SysUserServiceImpl extends ServiceImpl implements SysUserService {     @Override     public SysUserEntity getUserByUserName(String username) {         return this.baseMapper.selectOne(new LambdaQueryWrapper()                 .eq(SysUserEntity::getUsername,username)         );     } }
  修改完善部分登录服务代码:@RestController @RequestMapping("/") public class LoginController {     @Autowired     private LoginService loginService;      @PostMapping("token")     public SaResult doLogin(@RequestBody LoginForm form) throws Exception {          Map data = loginService.login(form);          return SaResult.data(data);     } }  public interface LoginService {     Map login(LoginForm form) throws Exception; }@Service("loginService") public class LoginServiceImpl implements LoginService {     @Autowired     private SysUserService userService;      @Override     public Map login(LoginForm form) throws Exception {         // 验证码校验          // 用户是否存在校验         SysUserEntity user = userService.getUserByUserName(form.getUsername());         System.out.println(user);         if (user == null){             throw new Exception("用户不存在");         }          // 密码校验          // 用户登录         StpUtil.login(form.getUsername());          // 返回结果         Map data = new HashMap<>();         data.put("token",StpUtil.getTokenValue());         data.put("userInfo","{"                 + ""dashboard": " + 0                 + ", "userId": "1""                 + ", "userName": "Administrator""                 + ", "role": "["SA", "admin", "Auditor"]""                 + "}");         return data;     } }
  重启项目调用登录,控制台输出一下内容
  LoginForm(username=admin, password=21232f297a57a5a743894a0e4a801fc3)
  SysUserEntity(id=1, username=admin, password=admin, salt=123456, name=超级管理员, createTime=2022-01-27T17:14:16, createBy=null, updateTime=2022-01-27T17:14:16, updateBy=null)
  SaLog -->: 账号[admin]登录成功
  整体登录流程就是这样了,继续完善。先确定密码加密方式:
  md5(md5(password)+md5(salt))
  在测试类中生成密码存到数据库中@Test public void createPass(){     System.out.println(SaSecureUtil.md5(SaSecureUtil.md5("admin")+SaSecureUtil.md5("20f883")));  }
  登录接口中密码已经在前端经过md5加密,所以修改后端代码if (user == null){     // 用户不存在     throw new Exception("账号密码错误"); }  // 密码校验 String password = SaSecureUtil.md5(form.getPassword()+SaSecureUtil.md5(user.getSalt())); if(!user.getPassword().equals(password)){     throw new Exception("账号密码错误"); }
  新建菜单Controller@RestController @RequestMapping("/system/menu") public class SysMenuController { 	// 创建几个静态路由     @GetMapping("/my")     public SaResult my(){         Map data = new HashMap<>();         List menu = new ArrayList<>();         List permissions = new ArrayList<>();         permissions.add("list.add");         permissions.add("list.edit");         permissions.add("list.delete");         permissions.add("user.add");         permissions.add("user.edit");         permissions.add("user.delete");         data.put("permissions",permissions);           SysMenuDTO menuitem = new SysMenuDTO("home","/home","home","首页","el-icon-eleme-filled","menu",null);         List childrens = new ArrayList<>();         childrens.add(new SysMenuDTO("dashboard","/dashboard","home","控制台","el-icon-menu","menu",true));         childrens.add(new SysMenuDTO("userCenter","/userCenter","userCenter","个人信息","el-icon-user","menu",null));         menuitem.setChildren(childrens);         menu.add(menuitem);          menuitem = new SysMenuDTO("setting","/setting","setting/system","配置","el-icon-setting","menu",null);         childrens = new ArrayList<>();         childrens.add(new SysMenuDTO("settingMenu","/setting/menu","setting/menu","菜单管理","el-icon-fold","menu",null));         menuitem.setChildren(childrens);         menu.add(menuitem);          data.put("menu",menu);          return SaResult.data(data);     }  }
  重启登录
  获取到的菜单
  OK,接下来从完善菜单管理开始逐步写。

7寸大的电脑,连手机热点玩魔兽世界怀旧服,是什么体验?魔兽世界虽然是一款大型3D网络游戏,但是最近新开了怀旧服60级的版本,毕竟是十多年前的游戏了哦,所以对电脑硬件的配置要求并不高,GPDPocket2代迷你电脑,也是可以玩的哦,虽然魔兽怀旧服玩家分享,PC掌机设置方法,续航够玩4个多小时现在越来越多人用GPDWIN2掌机玩魔兽世界怀旧服了,魔兽世界怀旧服相比正式服,对硬件的要求更低,用GPDWIN2来练级打本自然毫无压力,而玩家也摸索出了一套PC掌机的最佳设置方法纯电动车还得迈过的几道坎最近唱衰燃油车似乎越来越火了。其实纯电动车的发展恐怕还远不到成熟的时候,有其自身技术上的问题,也有基础设施的事,个人观察有这几道坎还得扛过去。一充电对于个人使用纯电车来说,充电续航实拍宝马X6低配,2。0T引擎百公里加速6。9秒,低重心过弯印象深刻跨界风格车型,目前屡见不鲜,而这一方面说到鼻祖款车型,我们会想到宝马X6,作为一款跨界轿跑SUV,辨识度极高,但在家族车型里,宝马X6销量并不算多么出色。从定价上来看,目前在售版本更高的颜值,更佳的体验,南卡LitePro真无线耳机体验与上一产品南卡Lite真无线耳机相比,南卡LitePro真无线耳机进行了诸多的升级,比如外观设计高通蓝牙5。2芯片等,总而言之,这一代的产品颜值更高,体验更佳。下面我将会和大家分享释放双耳,用音乐对抗疲劳,南卡Runner骨传导耳机体验身体是革命的本钱,即使工作再忙,也不能忘记运动。就我个人而言,我每次运动的时候都会听着音乐,用音乐对抗疲劳,所以说运动耳机对我来说是必不可缺的。不得不承认,骨传导耳机是运动耳机的最动铁加持,TWS耳机中的新晋旗舰,唐麦W5动铁真无线耳机体验与有线耳机相比,TWS耳机使用更加灵活自由,使其逐渐成为了消费者购买耳机的首选。但是市面上TWS耳机种类繁多,鱼龙混杂,说实话挑选一款适合自己的耳机实属不易。话已至此,我也不藏着掖南卡RunnerPro骨传导耳机,开启运动新风尚骨传导耳机作为专为运动而生的蓝牙耳机,得到了诸多运动者的喜爱。我也不例外,每次运动时,我都会戴着骨传导耳机,用音乐对抗疲劳。今天就给大家介绍一款与众不同的骨传导耳机南卡Runner轻如羽翼,时尚潮流,1MOREColorBuds时尚豆耳机1MOREColorBuds时尚豆真无线耳机给我的第一印象就是时尚,耳机采用全新配色,打破常规的黑白格局,让人耳目一新。1MOREColorBuds时尚豆真无线耳机一共有四种配色,即插即玩,零延迟让操作更流畅,雷蛇骑仕游戏手柄体验对于手游玩家来说,游戏手柄是不可或缺的拓展配件之一,但是市面的大多数的游戏手柄都是通过蓝牙来与手机互连的。众所周知,蓝牙游戏手柄在控制手游时存在一定的延迟,从而影响游戏操作与体验。哪里不会印哪里,学习生活好帮手,印先森M03宽幅错题打印机记得我上学的时候,错题全靠手抄,不仅效率低下,而且不易保存。虽然老师们常说手写一遍顶十遍,不过说实话,我真没觉得手抄能给我带来多少帮助。不过现在的学生就很幸福了,各种知识点都可以用
一机十用,功能全面,绿联TypeC多功能扩展坞体验对我们这种轻薄本电脑用户来说,TypeC多功能扩展坞是不可或缺的,毕竟电脑的扩展口真的太少了。就拿我的笔记本电脑来说,整机只有一个TypeC外接口,如果不借助外接扩展坞,根本无法边自制除菌湿巾,健康又安心,moido智能除菌湿巾机体验在日常生活中,免不了要用到湿纸巾,而市面上的很多湿巾都或多或少地存在一些问题,比如含荧光剂易撕烂易掉渣等,让人用的很不安心。因此,万全之策,莫过于自制除菌湿巾了,通过moido智能2021年国民运动健康洞察报告核心摘要本报告以大众对健康和运动的态度作为切入点,洞察大众对于运动健康的理想诉求与现实困境,并揭示疫情之下不同细分人群在饮食健康睡眠健康和运动健康方面的行为差异性。此外,本报告还探高效便捷,省时省力,WOWSTICKPLAYMINISD双动力锂电螺丝笔体验终于等来了WOWSTICK家的新品WOWSTICKPLAYMINISD双动力锂电螺丝笔。这款电动螺丝刀最大的特色就是采用了钢笔外形设计,更加小巧便携,并拥有多款可更换批头,依旧是一无感佩戴,舒适万分,万魔空气豆TWS耳机体验虽说TWS耳机为我们的工作生活带来了诸多的便利性,但是对于大多数TWS耳机来说,佩戴久了,耳朵还是会有疲劳不适的感觉,难免会影响佩戴体验,所以选购一款佩戴舒适的TWS耳机就显得尤为倍思九合一多功能TypeCHUB扩展坞,让电脑接口不再短缺如今的笔记本电脑,变得越来越薄,而这一切都是以牺牲电脑接口为代价的,比如取消了HDMI口USB口网口等,只剩下了一个TypeC口。显然,单个TypeC接口很难满足日常的所需。所以,SVC综艺市场洞察心动的信号3甜蜜种草核心摘要腾讯视频青年恋爱推理真人秀心动的信号于今年9月上线第三季,6位明星心动侦探观察和解读6位素人之间的情感交流和心动信号,携5大赞助品牌在甜蜜氛围中花式种草。艾瑞SVC(Spo艾瑞从2020双十一前序营销看新消费生态的纵向深化核心摘要双十一是中国消费经济中的重要概念。经过11年的发展,双十一已经成为一个代表着特定价值观念文化态度和生活方式的时代符号。2019年天猫双十一成交总额(GMV)达到2684亿元艾瑞巩固内容生态优势,国民级应用微博依然年轻10月19日,微博年度品牌活动2020微博超级红人节开幕。在红人节上,微博公布了目前平台的内容生态发展现状及各项数据。作为内容社区和媒体平台的结合,微博的核心功能能够充分满足内容生2020金瑞营销奖评委阵容公布2006年起,金瑞营销奖设立了由各行业品牌方营销决策者高层组成的专家评审,以广告投放视角来深度挖掘创新营销价值,用行业维度来甄选最具代表性的创新营销案例,颁出年度营销大奖,获得了业2020年中国5G新基建研究报告核心摘要5G新基建将改变商业的本质,是支撑数字经济发展的新型基础设施。5G时代,链接媒介和服务终端归属权的变化,将引发商业模式革命,2C模式将向2B2C模式的深层转变。5G新基建需