大多数小伙伴可能都了解,只不过对于名词比较陌生。RBAC就是用户-菜单-权限的一套解决方案,大多数的系统权限菜单方案都是RBAC模型,
其中包括5张表:
用户表 ( sys_user ):保存用户信息
角色表 ( sys_role ):保存角色信息
权限表 ( sys_node ):保存系统资源信息。如:菜单、按钮 和对应 URL
它们的关系 :用户表与角色表是 多对多关系 ,角色表与资源表是多对多关系。
用户角色关系表(sys_user_user):用于维护用户和角色的关系
角色资源关系表(sys_access):用于维护角色与资源的关系
mysql脚本
DROP TABLE IF EXISTS `sys_permission`; CREATE TABLE `sys_permission` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '权限 ID', `parent_id` bigint(20) DEFAULT NULL COMMENT '父权限 ID (0为顶级菜单)', `name` varchar(64) NOT NULL COMMENT '权限名称', `code` varchar(64) DEFAULT NULL COMMENT '授权标识符', `url` varchar(255) DEFAULT NULL COMMENT '授权路径', `type` int(2) NOT NULL DEFAULT '1' COMMENT '类型(1菜单,2按钮)', `icon` varchar(200) DEFAULT NULL COMMENT '图标', `remark` varchar(200) DEFAULT NULL COMMENT '备注', `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8 COMMENT='权限表'; DROP TABLE IF EXISTS `sys_role`; CREATE TABLE `sys_role` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色 ID', `name` varchar(64) NOT NULL COMMENT '角色名称', `remark` varchar(200) DEFAULT NULL COMMENT '角色说明', `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COMMENT='角色表'; DROP TABLE IF EXISTS `sys_role_permission`; CREATE TABLE `sys_role_permission` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键 ID', `role_id` bigint(20) NOT NULL COMMENT '角色 ID', `permission_id` bigint(20) NOT NULL COMMENT '权限 ID', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 COMMENT='角色权限表'; DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sys_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户 ID', `username` varchar(50) NOT NULL COMMENT '用户名', `password` varchar(64) NOT NULL COMMENT '密码,加密存储, admin/1234', `is_account_non_expired` int(2) DEFAULT '1' COMMENT '帐户是否过期(1 未过期,0已过期)', `is_account_non_locked` int(2) DEFAULT '1' COMMENT '帐户是否被锁定(1 未过期,0已过期)', `is_credentials_non_expired` int(2) DEFAULT '1' COMMENT '密码是否过期(1 未过期,0已过期)', `is_enabled` int(2) DEFAULT '1' COMMENT '帐户是否可用(1 可用,0 删除用户)', `nick_name` varchar(64) DEFAULT NULL COMMENT '昵称', `mobile` varchar(20) DEFAULT NULL COMMENT '注册手机号', `email` varchar(50) DEFAULT NULL COMMENT '注册邮箱', `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`) USING BTREE, UNIQUE KEY `mobile` (`mobile`) USING BTREE, UNIQUE KEY `email` (`email`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='用户表'; DROP TABLE IF EXISTS `sys_user_role`; CREATE TABLE `sys_user_role` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键 ID', `user_id` bigint(20) NOT NULL COMMENT '用户 ID', `role_id` bigint(20) NOT NULL COMMENT '角色 ID', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='用户角色表';