017-从零搭建微服务-系统服务(四)

这篇具有很好参考价值的文章主要介绍了017-从零搭建微服务-系统服务(四)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在最前

如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。

源码地址(后端):https://gitee.com/csps/mingyue-springcloud-learning

源码地址(前端):https://gitee.com/csps/mingyue-springcloud-ui

文档地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis

数据库权限模型设计

设计思路:通过用户关联角色(一个用户可关联多个角色),角色关联菜单(一个角色可关联多个菜单),完成用户权限控制。

  • 用户 1 => 角色 N
  • 角色 1 => 菜单(权限点)N
sys_user           用户表
sys_user_role      用户角色关系表
sys_role           角色表
sys_role_menu      角色菜单关系表
sys_menu           菜单表

017-从零搭建微服务-系统服务(四),MingYue微服务,微服务,架构,云原生

用户表

用户表在之前的开发中已经设计并使用了

CREATE TABLE `sys_user` (
    `user_id`      BIGINT(20)       NOT NULL        COMMENT '用户ID',
    `username`     VARCHAR(64)      NOT NULL        COMMENT '用户名',
    `nickname`     VARCHAR(64)      NOT NULL        COMMENT '用户昵称',
    `sex`          CHAR(1)          DEFAULT '0'     COMMENT '用户性别(0男 1女 2未知)',
    `password`     VARCHAR(255)     NOT NULL        COMMENT '密码',
    `phone`        VARCHAR(32)      DEFAULT NULL    COMMENT '手机号码',
    `email`        VARCHAR(32)      DEFAULT NULL    COMMENT '用户邮箱',
    `avatar`       VARCHAR(255)     DEFAULT NULL    COMMENT '头像',
    `status`       CHAR(1)          DEFAULT '0'     COMMENT '帐号状态(0正常 1停用)',
    `is_deleted`   CHAR(1)          DEFAULT '0'     COMMENT '删除标志(0正常,1删除)',
    `create_time`  DATETIME         DEFAULT NULL    COMMENT '创建时间',
    `update_time`  DATETIME         DEFAULT NULL    COMMENT '修改时间',
    `create_by`    VARCHAR(64)      DEFAULT NULL    COMMENT '创建者',
    `update_by`    VARCHAR(64)      DEFAULT NULL    COMMENT '更新人',
    PRIMARY KEY (`user_id`),
    KEY `user_idx1_username` (`username`)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT = '用户表';


BEGIN;
INSERT INTO `sys_user` VALUES (1, 'mingyue', '明月', '0', '123456', '13288888888', NULL, NULL, '0', '0', '2023-07-19 17:06:22', '2023-07-19 17:06:25', 'mingyue', 'mingyue');
INSERT INTO `sys_user` VALUES (2, 'strive', 'Strive', '0', '123456', '15388888888', NULL, NULL, '0', '0', '2023-07-19 17:06:22', '2023-07-19 17:06:25', 'mingyue', 'mingyue');
COMMIT;

角色表

CREATE TABLE sys_role (
    `role_id`       BIGINT(20)      NOT NULL         COMMENT '角色ID',
    `role_name`     VARCHAR(64)     NOT NULL         COMMENT '角色名称',
    `role_code`     VARCHAR(64)     NOT NULL         COMMENT '角色代码',
    `order_num`     INT(4)          NOT NULL         COMMENT '显示顺序',
    `status`        CHAR(1)         DEFAULT '0'      COMMENT '角色状态(0正常 1停用)',
    `role_desc`     VARCHAR(255)    DEFAULT NULL     COMMENT '角色描述',
    `is_deleted`    CHAR(1)         DEFAULT '0'      COMMENT '删除标志(0正常,1删除)',
    `create_time`   DATETIME        DEFAULT NULL     COMMENT '创建时间',
    `update_time`   DATETIME        DEFAULT NULL     COMMENT '修改时间',
    `create_by`     VARCHAR(64)     DEFAULT NULL     COMMENT '创建者',
    `update_by`     VARCHAR(64)     DEFAULT NULL     COMMENT '更新人',
    PRIMARY KEY (`role_id`),
    UNIQUE KEY `role_idx1_role_code` (`role_code`)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT = '角色表';


BEGIN;
INSERT INTO `sys_role` VALUES (1, '超级管理员', 'admin', 0, '0', NULL, '0', '2023-07-19 17:06:22', '2023-07-19 17:06:25', 'mingyue', 'mingyue');
INSERT INTO `sys_role` VALUES (2, '普通用户', 'common', 1, '0', NULL, '0', '2023-07-19 17:06:22', '2023-07-19 17:06:25', 'mingyue', 'mingyue');
COMMIT;

用户角色关系表

管理用户与角色之间关系,用户 1 => 角色 N

DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE sys_user_role (
    `user_id`   BIGINT(20) NOT NULL COMMENT '用户ID',
    `role_id`   BIGINT(20) NOT NULL COMMENT '角色ID',
    PRIMARY KEY (`user_id`, `role_id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT = '用户和角色关联表';

BEGIN;
INSERT INTO `sys_user_role` VALUES (1, 1);
INSERT INTO `sys_user_role` VALUES (2, 2);
COMMIT;

菜单表

菜单表的设计参考前端项目 JSON 数据设计

{
  // 菜单路径,用于跳转
  path: '/home',
  // 菜单 name,用于界面 keep-alive 路由缓存。
  // 此 name 需要与 component 组件中的 name 值相同(唯一)
  name: 'home',
  // 组件路径
  component: () => import('/@/views/home/index.vue'),
  // 菜单重定向路径
  redirect: '/home',
  // 附加自定义数据
  meta: {
    // 菜单标题(国际化写法)
    title: 'message.router.home',
    // 菜单外链链接
    // 开启外链条件,`1、isLink: true 2、链接地址不为空(meta.isLink) 3、isIframe: false`
    isLink: '',
    // 菜单是否隐藏(菜单不显示在界面,但可以进行跳转)
    isHide: false,
    // 菜单是否缓存
    isKeepAlive: true,
    // 菜单是否固定(固定在 tagsView 中,不可进行关闭),右键菜单无 `关闭` 项
    isAffix: true,
    // 是否内嵌
    // 开启条件,`1、isIframe: true 2、链接地址不为空(meta.isLink)`
    isIframe: false,
    // 当前路由权限标识,取角色管理。控制路由显示、隐藏。超级管理员:admin 普通角色:common
    // 之前 auth 取用户(角色下有多个用户)
    roles: ['admin', 'common'],
    // 菜单图标
    icon: 'iconfont icon-shouye',
    // 自行再添加
    ...
  },
}
CREATE TABLE `sys_menu` (
    `menu_id`        BIGINT(20)    NOT NULL                COMMENT '菜单名称',
    `menu_name`      VARCHAR(32)   NOT NULL                COMMENT '菜单名称',
    `parent_id`      BIGINT(20)    DEFAULT NULL            COMMENT '父菜单ID',
    `permission`     VARCHAR(32)   DEFAULT NULL            COMMENT '权限标识',
    `type`           CHAR(1)       DEFAULT NULL            COMMENT '菜单类型(0菜单 1按钮)',
    `order_num`      INT(4)        NOT NULL DEFAULT '0'    COMMENT '排序值',
    `path`           VARCHAR(128)  DEFAULT NULL            COMMENT '路由地址(前端URL)',
    `component`      VARCHAR(255)  DEFAULT null            COMMENT '组件路径',
    `redirect`       VARCHAR(255)  DEFAULT null            COMMENT '重定向路径',
    `is_link`        CHAR(1)       DEFAULT '0'             COMMENT '是否为外链(0否 1是)',
    `is_hide`        CHAR(1)       DEFAULT '0'             COMMENT '是否隐藏(0否 1是)',
    `is_keep_alive`  CHAR(1)       DEFAULT '0'             COMMENT '是否开启缓存(0否 1是)',
    `is_affix`       CHAR(1)       DEFAULT '0'             COMMENT '是否固定(0否 1是)',
    `is_iframe`      CHAR(1)       DEFAULT '0'             COMMENT '是否内嵌(0否 1是)',
    `status`         CHAR(1)       DEFAULT '0'             COMMENT '菜单状态(0正常 1停用)',
    `icon`           VARCHAR(64)   DEFAULT NULL            COMMENT '图标',
    `is_deleted`     CHAR(1)       DEFAULT '0'             COMMENT '删除标志(0正常,1删除)',
    `create_time`    DATETIME      DEFAULT NULL            COMMENT '创建时间',
    `update_time`    DATETIME      DEFAULT NULL            COMMENT '修改时间',
    `create_by`      VARCHAR(64)   DEFAULT NULL            COMMENT '创建者',
    `update_by`      VARCHAR(64)   DEFAULT NULL            COMMENT '更新人',
    PRIMARY KEY (`menu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='菜单权限表';


BEGIN;
INSERT INTO `sys_menu` VALUES (1000, '系统管理', -1, NULL, '0', 0, '/system', NULL, NULL, '0', '0', '0', '0', '0', '0', 'iconfont icon-xitongshezhi', '0', '2023-07-20 17:00:49', '2023-07-20 17:01:09', 'mingyue', 'mingyue');
INSERT INTO `sys_menu` VALUES (1100, '用户管理', 1000, NULL, '0', 0, '/system/user', NULL, NULL, '0', '0', '0', '0', '0', '0', 'iconfont icon-icon-', '0', '2023-07-20 17:00:49', '2023-07-20 17:01:09', 'mingyue', 'mingyue');
INSERT INTO `sys_menu` VALUES (1200, '角色管理', 1000, NULL, '0', 1, '/system/role', NULL, NULL, '0', '0', '0', '0', '0', '0', 'ele-ColdDrink', '0', '2023-07-20 17:00:49', '2023-07-20 17:01:09', 'mingyue', 'mingyue');
INSERT INTO `sys_menu` VALUES (1300, '菜单管理', 1000, NULL, '0', 2, '/system/menu', NULL, NULL, '0', '0', '0', '0', '0', '0', 'iconfont icon-caidan', '0', '2023-07-20 17:00:49', '2023-07-20 17:01:09', 'mingyue', 'mingyue');
COMMIT;

角色菜单关联表

管理角色与菜单之间关系,角色 1 => 菜单(权限点)N

DROP TABLE IF EXISTS `sys_role_menu`;
CREATE TABLE sys_role_menu (
    `role_id`   BIGINT(20) NOT NULL COMMENT '角色ID',
    `menu_id`   BIGINT(20) NOT NULL COMMENT '菜单ID',
    PRIMARY KEY (`role_id`, `menu_id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT = '角色和菜单关联表';

BEGIN;
INSERT INTO `sys_role_menu` VALUES (1, 1000);
INSERT INTO `sys_role_menu` VALUES (1, 1100);
INSERT INTO `sys_role_menu` VALUES (1, 1200);
INSERT INTO `sys_role_menu` VALUES (1, 1300);
INSERT INTO `sys_role_menu` VALUES (2, 1000);
INSERT INTO `sys_role_menu` VALUES (2, 1100);
COMMIT;

编写关系 SQL

用户与角色

SELECT su.user_id, su.username, su.nickname,sur.role_id,sr.role_name FROM sys_user su
LEFT JOIN sys_user_role sur ON sur.user_id = su.user_id
LEFT JOIN sys_role sr ON sr.role_id = sur.role_id

角色与菜单

SELECT sr.role_id, sr.role_name, sm.menu_id, sm.menu_name FROM sys_role sr
LEFT JOIN sys_role_menu srm ON srm.role_id = sr.role_id
LEFT JOIN sys_menu sm ON sm.menu_id = srm.menu_id

用户与菜单

SELECT su.user_id, su.username, su.nickname,sur.role_id,sr.role_name, sm.menu_id, sm.menu_name FROM sys_user su
LEFT JOIN sys_user_role sur ON sur.user_id = su.user_id
LEFT JOIN sys_role sr ON sr.role_id = sur.role_id
LEFT JOIN sys_role_menu srm ON srm.role_id = sr.role_id
LEFT JOIN sys_menu sm ON sm.menu_id = srm.menu_id

小结

数据库权限模型设计到此就 OK 啦~

接下来把基础代码生成一下,对外提供相应接口文章来源地址https://www.toymoban.com/news/detail-602392.html

到了这里,关于017-从零搭建微服务-系统服务(四)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 024-从零搭建微服务-系统服务(六)

    如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源码地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文档地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis mingyue-ui 目前与后端交

    2024年02月09日
    浏览(38)
  • 从零开始:如何使用Docker构建微服务架构

    使用 Docker 构建微服务架构是一种流行的方法,因为 Docker 提供了轻量级的容器化技术,使得每个微服务可以在隔离的环境中独立运行。从零开始构建这样的架构涉及到多个步骤,包括理解微服务架构的基本概念、安装 Docker、创建 Docker 容器和镜像、配置网络,以及部署和管理

    2024年04月14日
    浏览(58)
  • 深入探索JavaEE单体架构、微服务架构与云原生架构

    链接: https://pan.baidu.com/s/1xSI1ofwYXfqOchfwszCZnA?pwd=4s99 提取码: 4s99 复制这段内容后打开百度网盘手机App,操作更方便哦 --来自百度网盘超级会员v4的分享 🔍【00】模块零:开营直播:精彩直播课程带你全面了解最新技术动态,为学习之旅打下良好基础!🎥💻 🏠【01】模块一:

    2024年02月12日
    浏览(44)
  • 浅析云原生时代的服务架构演进

    摘要: 相比于传统的微服务架构,云原生和 serverless 技术更加灵活、高效,能够更好地满足用户的需求。 本文分享自华为云社区《《凤凰架构》学习和思考——云原生时代的服务架构演进史》,作者:breakDawn。 随着云原生的概念越来越火,服务的架构应该如何发展和演进,

    2023年04月10日
    浏览(76)
  • 微服务架构2.0--云原生时代

    云原生(Cloud Native)是一种关注于在云环境中构建、部署和管理应用程序的方法和理念。云原生应用能够最大程度地利用 云计算基础设施的优势,如弹性、自动化、可伸缩性和高可用性 。这个概念涵盖了许多方面,包括 架构、开发、部署、运维 和团队文化等 容器化: 将应

    2024年02月11日
    浏览(37)
  • 023-从零搭建微服务-推送服务(三)

    原【短信服务】更名【推送服务】 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源码地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文档地址:https://gitee.com/csps/mingyue-springc

    2024年02月10日
    浏览(32)
  • 028-从零搭建微服务-搜索服务(二)

    如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源码地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文档地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis 更多用法可以参考 E

    2024年02月07日
    浏览(31)
  • 027-从零搭建微服务-搜索服务(一)

    如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源码地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文档地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis Docker 安装 ELK 7.17.2 h

    2024年02月07日
    浏览(36)
  • 021-从零搭建微服务-短信服务(一)

    如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源码地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文档地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis 短信服务(Short Messa

    2024年02月11日
    浏览(36)
  • 022-从零搭建微服务-短信服务(二)

    如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源码地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文档地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis 需要注册一个阿里云账

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包