资源管理系统-基于角色的权限控制(role-based access control)

tech2022-10-01  54

一、RBAC简介

RBAC(role-based access control),基于角色的权限控制系统,是指对于不同角色的用户,拥有不同的权限 。用户绑定角色,角色绑定菜单权限和资源权限,形成用户-角色-权限的关系,如下图所示。 用户角色权限关系图:

二、技术框架选择

前端:Vue、Vue-router、Axios、Js-cookie 后端:SpringBoot、SpringSecurity、MyBatis、MyBatisGenerator、PageHelper、Redis、JWT

三、用户登录及权限控制流程说明

1、前端发起登陆请求并带上用户登录参数。 2、后台接收到登录请求,根据用户的登录参数进行身份验证,身份验证通过后,生成并返回一个TOKEN。 3、前端收到登录成功返回信息后,拿到TOKEN,并存在缓存中。 4、前端页面跳转到首页,同时发送一个用户信息查询请求,将TOKEN作为请求头信息一起发送给后端。 5、后端拦截器拦截到查询请求,校验TOKEN,判断该请求是否需要权限,不需要校验权限直接放行,需要权限则查询用户资源权限,有权限就放行,无权限则抛出返回无权限访问异常。校验成功后从数据库中查询用户昵称及菜单权限,返回查询结果。 6、前端根据用户菜单权限展示菜单列表,用户无权限的菜单不展示。 7、前端发起其他请求,同样需要携带TOKEN。 8、后端拦截到请求,校验方式通步骤5

四、数据库设计

用户角色权限关系数据库模型 建表语句

/* Navicat Premium Data Transfer Source Server : MysqlLocal Source Server Type : MySQL Source Server Version : 50728 Source Host : localhost:3306 Source Schema : auth Target Server Type : MySQL Target Server Version : 50728 File Encoding : 65001 Date: 03/09/2020 11:49:20 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for auth_menu -- ---------------------------- DROP TABLE IF EXISTS `auth_menu`; CREATE TABLE `auth_menu` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父级ID', `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '前端名称', `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单名称', `level` int(4) NULL DEFAULT NULL COMMENT '菜单级数', `icon` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '前端图标', `sort` int(4) NULL DEFAULT NULL COMMENT '菜单排序', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', `hidden` int(1) NULL DEFAULT NULL COMMENT '前端隐藏', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 33 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for auth_resource -- ---------------------------- DROP TABLE IF EXISTS `auth_resource`; CREATE TABLE `auth_resource` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `category_id` bigint(20) NULL DEFAULT NULL COMMENT '资源分类ID', `name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '资源名称', `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', `url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '资源URL', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, INDEX `pk_ar_category_id`(`category_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for auth_resource_category -- ---------------------------- DROP TABLE IF EXISTS `auth_resource_category`; CREATE TABLE `auth_resource_category` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '分类名称', `sort` int(4) NULL DEFAULT NULL COMMENT '排序', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '资源分类' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for auth_role -- ---------------------------- DROP TABLE IF EXISTS `auth_role`; CREATE TABLE `auth_role` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', `user_count` int(11) NULL DEFAULT NULL COMMENT '后台用户数量', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', `status` int(1) NULL DEFAULT 1 COMMENT '启用状态:0->禁用;1->启用', `sort` int(11) NULL DEFAULT 0 COMMENT '排序', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for auth_role_menu -- ---------------------------- DROP TABLE IF EXISTS `auth_role_menu`; CREATE TABLE `auth_role_menu` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `role_id` bigint(20) NULL DEFAULT NULL COMMENT '角色ID', `menu_id` bigint(20) NULL DEFAULT NULL COMMENT '菜单ID', PRIMARY KEY (`id`) USING BTREE, INDEX `pk_rm_role_id`(`role_id`) USING BTREE, INDEX `pk_rm_menu_id`(`menu_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 240 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for auth_role_resource -- ---------------------------- DROP TABLE IF EXISTS `auth_role_resource`; CREATE TABLE `auth_role_resource` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `role_id` bigint(20) NULL DEFAULT NULL COMMENT '角色ID', `resource_id` bigint(20) NULL DEFAULT NULL COMMENT '资源ID', PRIMARY KEY (`id`) USING BTREE, INDEX `pk_rc_role_id`(`role_id`) USING BTREE, INDEX `pk_rc_resource_id`(`resource_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 344 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for auth_user -- ---------------------------- DROP TABLE IF EXISTS `auth_user`; CREATE TABLE `auth_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名', `password` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码', `nickname` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '昵称', `id_number` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '身份证号', `sex` int(1) NULL DEFAULT NULL COMMENT '性别:0->女;1->男', `birthday` datetime(0) NULL DEFAULT NULL COMMENT '出生日期', `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱', `phone` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系方式', `icon` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像', `note` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注信息', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', `login_time` datetime(0) NULL DEFAULT NULL COMMENT '最后登录时间', `status` int(1) NULL DEFAULT 1 COMMENT '帐号启用状态:0->禁用;1->启用', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for auth_user_role -- ---------------------------- DROP TABLE IF EXISTS `auth_user_role`; CREATE TABLE `auth_user_role` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `user_id` bigint(20) NULL DEFAULT NULL, `role_id` bigint(20) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, INDEX `pk_ur_user_id`(`user_id`) USING BTREE, INDEX `pk_ur_role_id`(`role_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 58 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;

五、项目演示

项目演示地址:http://175.24.75.121/#/login 用户名:visitor 密码:visitor

六、GITHUB

前端工程:https://github.com/STIll-clx/rms-admin-web 后端工程:https://github.com/STIll-clx/rms

最新回复(0)