• 用户角色权限、按钮控制功表及返回数据格式


    1、表结构

    1.1 用户表system_user

    1. CREATE TABLE `system_user` (
    2. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
    3. `username` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户账号',
    4. `password` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '密码',
    5. `nickname` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户昵称',
    6. `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
    7. `dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID',
    8. `post_ids` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '岗位编号数组',
    9. `email` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '用户邮箱',
    10. `mobile` varchar(11) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '手机号码',
    11. `sex` tinyint(4) DEFAULT 0 COMMENT '用户性别',
    12. `avatar` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '头像地址',
    13. `status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '帐号状态(0正常 1停用)',
    14. `login_ip` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '最后登录IP',
    15. `login_date` datetime DEFAULT NULL COMMENT '最后登录时间',
    16. `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
    17. `create_time` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',
    18. `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
    19. `update_time` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '更新时间',
    20. `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    21. `tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租户编号',
    22. PRIMARY KEY (`id`) USING BTREE,
    23. UNIQUE KEY `idx_username` (`username`,`update_time`,`tenant_id`) USING BTREE
    24. ) ENGINE=InnoDB AUTO_INCREMENT=127 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='用户信息表';

    1.2 用户角色表system_user_role

    1. CREATE TABLE `system_user_role` (
    2. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增编号',
    3. `user_id` bigint(20) NOT NULL COMMENT '用户ID',
    4. `role_id` bigint(20) NOT NULL COMMENT '角色ID',
    5. `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
    6. `create_time` datetime DEFAULT NULL COMMENT '创建时间',
    7. `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
    8. `update_time` datetime DEFAULT NULL COMMENT '更新时间',
    9. `deleted` bit(1) DEFAULT b'0' COMMENT '是否删除',
    10. `tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租户编号',
    11. PRIMARY KEY (`id`) USING BTREE
    12. ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='用户和角色关联表';

    1.3 角色表system_role

    1. CREATE TABLE `system_role` (
    2. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色ID',
    3. `name` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色名称',
    4. `code` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色权限字符串',
    5. `sort` int(11) NOT NULL COMMENT '显示顺序',
    6. `data_scope` tinyint(4) NOT NULL DEFAULT 1 COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
    7. `data_scope_dept_ids` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '数据范围(指定部门数组)',
    8. `status` tinyint(4) NOT NULL COMMENT '角色状态(0正常 1停用)',
    9. `type` tinyint(4) NOT NULL COMMENT '角色类型',
    10. `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
    11. `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
    12. `create_time` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',
    13. `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
    14. `update_time` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '更新时间',
    15. `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    16. `tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租户编号',
    17. PRIMARY KEY (`id`) USING BTREE
    18. ) ENGINE=InnoDB AUTO_INCREMENT=116 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='角色信息表';

    1.4 菜单表system_menu

    1. CREATE TABLE `system_menu` (
    2. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
    3. `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单名称',
    4. `permission` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '权限标识',
    5. `menu_type` tinyint(4) NOT NULL COMMENT '菜单类型(M目录 C菜单 F按钮)',
    6. `sort` int(11) NOT NULL DEFAULT 0 COMMENT '显示顺序',
    7. `parent_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '父菜单ID',
    8. `path` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '路由地址',
    9. `icon` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '#' COMMENT '菜单图标',
    10. `component` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '组件路径',
    11. `status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '菜单状态(0正常 1停用)',
    12. `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
    13. `create_time` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',
    14. `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
    15. `update_time` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '更新时间',
    16. `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    17. PRIMARY KEY (`id`) USING BTREE
    18. ) ENGINE=InnoDB AUTO_INCREMENT=1333 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='菜单权限表';
    DIR(1), // 目录
    MENU(2), // 菜单
    BUTTON(3) // 按钮

     

    /**

    * 权限标识

    *

    * 一般格式为:${系统}:${模块}:${操作}

    * 例如说:system:admin:add,即 system 服务的添加管理员。

    *

    * 当我们把该 MenuDO 赋予给角色后,意味着该角色有该资源:

    * - 对于后端,配合 @PreAuthorize 注解,配置 API 接口需要该权限,从而对 API 接口进行权限控制。
    @PreAuthorize("@ss.hasPermission('system:dict:create')")
    * - 对于前端,配合前端标签,配置按钮是否展示,避免用户没有该权限时,结果可以看到该操作。

    */

    前端控制权限实现:

     ​​​​​​​hasPermi.js

    1. /**
    2. * 角色权限处理
    3. * Copyright (c) 2019 ruoyi
    4. */
    5. import store from '@/store'
    6. export default {
    7. inserted(el, binding, vnode) {
    8. const {value} = binding
    9. const super_admin = "admin";
    10. const roles = store.getters && store.getters.roles
    11. if (value && value instanceof Array && value.length > 0) {
    12. const roleFlag = value
    13. const hasRole = roles.some(role => {
    14. return super_admin === role || roleFlag.includes(role)
    15. })
    16. if (!hasRole) {
    17. el.parentNode && el.parentNode.removeChild(el)
    18. }
    19. } else {
    20. throw new Error(`请设置角色权限标签值"`)
    21. }
    22. }
    23. }

    ​​​​​​​ index.js

    1. import hasRole from './permission/hasRole'
    2. import hasPermi from './permission/hasPermi'
    3. import dialogDrag from './dialog/drag'
    4. import dialogDragWidth from './dialog/dragWidth'
    5. import dialogDragHeight from './dialog/dragHeight'
    6. import clipboard from './module/clipboard'
    7. const install = function (Vue) {
    8. Vue.directive('hasRole', hasRole)
    9. Vue.directive('hasPermi', hasPermi)
    10. Vue.directive('clipboard', clipboard)
    11. Vue.directive('dialogDrag', dialogDrag)
    12. Vue.directive('dialogDragWidth', dialogDragWidth)
    13. Vue.directive('dialogDragHeight', dialogDragHeight)
    14. }
    15. if (window.Vue) {
    16. window['hasRole'] = hasRole
    17. window['hasPermi'] = hasPermi
    18. Vue.use(install); // eslint-disable-line
    19. }
    20. export default install

    1.5 角色和菜单表system_role_menu

    1. CREATE TABLE `system_role_menu` (
    2. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增编号',
    3. `role_id` bigint(20) NOT NULL COMMENT '角色ID',
    4. `menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
    5. `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
    6. `create_time` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',
    7. `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
    8. `update_time` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '更新时间',
    9. `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    10. `tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租户编号',
    11. PRIMARY KEY (`id`) USING BTREE
    12. ) ENGINE=InnoDB AUTO_INCREMENT=1964 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='角色和菜单关联表';

    2、查询接口

    返回用户数据格式:

    {

        "code": 0,

        "data": {

            "user": {

                "id": 123,

                "nickname": "昵称123",

                "avatar": ""

            },

            "roles": [

                "test"

            ],

            "permissions": [

                "",

                "system:sysPoc:update",

                "system:error-code:export",

                "system:menu:query",

                "system:permission:assign-role-menu",

                "system:sysPoc:delete",

                "system:sysLabel:import",

                "system:user:query",

                "system:error-code:query",

                "system:sysPort:deletePort",

                "system:user:export",

                "system:dept:update",

                "system:dept:delete",

                "system:error-code:create",

                "system:dept:query",

                "system:role:delete",

                "system:dept:create",

                "system:menu:create",

                "system:sysFingerRules:deteleRule",

                "system:user-session:page",

                "system:dict:create",

                "system:dict:query",

                "system:dict:update",

                "system:sysFingerRules:updateWuYan",

                "system:sysIp:update",

                "system:user:update-password",

                "system:sysFingerRules:deleteClassify",

                "system:dict:export",

                "system:sysIp:create",

                "system:user:delete",

                "system:user:import",

                "system:sysPort:updateGroup",

                "system:error-code:update",

                "system:user:update",

                "system:sysFingerRules:updateRule",

                "system:menu:delete",

                "system:sysPoc:create",

                "system:sysLabel:export",

                "system:sysIp:export",

                "system:sysPort:createPort",

                "system:error-code:delete",

                "system:sysPort:deleteGroup",

                "system:menu:update",

                "system:sysFingerRules:updateClassify",

                "system:sysFingerRules:createRule",

                "system:sysPort:createGroup",

                "system:login-log:query",

                "system:permission:assign-role-data-scope",

                "system:sysFingerRules:transferClassify",

                "system:role:update",

                "system:sysPort:updatePort",

                "system:user:list",

                "system:login-log:export",

                "system:user:create",

                "system:operate-log:query",

                "system:role:export",

                "system:sysFingerRules:createClassify",

                "system:permission:assign-user-role",

                "system:sysIp:delete",

                "system:role:create",

                "system:dict:delete",

                "system:operate-log:export",

                "system:role:query"

            ]

        },

        "msg": ""

    }

  • 相关阅读:
    pytorch从0开始安装
    论文阅读(10) 基于吸力的推进是动物高效游泳的基础(2015)
    Unity中Shader立方体纹理Cubemap
    优化网站以提升原创性和性能
    Docker理论— 什么是虚拟化
    CICD命令
    机器学习(三十二):Apriori 算法进行关联规则挖掘(一)
    EDI对接 New York & Company案例
    快速幂的模板
    传统关系型数据库(mysql),缓存(redis),elasticsearch
  • 原文地址:https://blog.csdn.net/inexaustible/article/details/126701543