当前位置: 首页 > article >正文

MySQL数据表设计 系统权限表设计 权限、角色、用户表设计

数据库

创建

CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改

ALTER DATABASE my_database CHARACTER SET=utf8mb4  COLLATE=utf8mb4_unicode_ci;

字符集:utf8和utf8mb4,推荐使用:utf8mb4

utf8:主要支持Unicode字符集中的基本多语言平面(BMP)范围内的字符,码点范围从0x0000到0xFFFF。这涵盖了大多数常用的字符,包括拉丁语、希腊语、中文、日文等。但它不包含一些表情符号(Emoji)。

utf8mb4:是utf8的超集,支持Unicode字符集的全部字符,能够表示更多的特殊字符。

校对规则(Collation),推荐使用:utf8mb4_unicode_ci

校对规则(Collation)也可以称为排序规则,是一组字符编码规则,用于对字符串进行排序和比较。

数据库配置设置:my.ini或者my.cnf

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

权限系统

ACL(Access Control List),访问控制列表

ACL是一种访问控制机制,包含三个关键要素:用户(User)、资源(Resource)和操作(Operate),当用户请求操作资源时,检查资源的权限列表,如果资源的权限列表中存在该用户的操作权限则允许,否则拒绝。

RBAC(Role-Based Access Control),基于角色的访问控制

RBAC模型,三个基础组成部分:用户(User)、角色(Role)和权限(Privilege),通过定义角色的权限,授予用户某个角色从而来控制用户的权限,实现了用户和权限的逻辑分离(区别于ACL模型);

RBAC权限授权,实际上是:Who、What、How,构成了访问权限三元组,也就是:Who对What(Which)进行How的操作。

Who:权限的拥用者或主体,如:Principal、User、Group、 Role、Actor等等;

What:权限针对的对象或资源(Resource、Class);

How:具体的权限(Privilege,正向授权与负向授权);

Operator:操作,表明对What的How操作,也就是:权限(Privilege)+ 资源(Resource);

Role:角色,一定数量的权限的集合,权限分配的单位与载体,目的是隔离用户(User)和权限(Privilege)的逻辑关系;

Group:用户组,权限分配的单位与载体,权限不考虑分配给特定的用户而给组,组可以包括组(以实现权限的继承),也可以包含用户,组内用户继承组的权限,User与Group是多对多的关系,Group可以层次化,以满足不同层级权限控制的要求。

数据库表设计

/** 功能权限表 **/
CREATE TABLE `t_permission` (
	`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '菜单ID' primary key,
	`name` VARCHAR(32) NOT NULL COMMENT '菜单名称',
	`mark` VARCHAR(32) NULL DEFAULT NULL COMMENT '菜单权限标识',
	`path` VARCHAR(128) NULL DEFAULT NULL COMMENT '前端URL',
	`url` VARCHAR(128) NULL DEFAULT NULL COMMENT '请求链接',
	`method` VARCHAR(32) NULL DEFAULT NULL COMMENT '请求方法',
	`parent_id` INT(11) NULL DEFAULT NULL COMMENT '父菜单ID',
	`parent_full_path` VARCHAR(256) NULL DEFAULT NULL COMMENT '菜单全路径',
	`icon` VARCHAR(32) NULL DEFAULT NULL COMMENT '图标',
	`component` VARCHAR(64) NULL DEFAULT NULL COMMENT '组件',
	`type` INT(2) NULL DEFAULT '0' COMMENT '菜单类型 (0菜单 1按钮)',
	`status` INT(2) NULL DEFAULT '1' COMMENT '状态:1:启用;0:停用',
    `level` INT(5) NULL DEFAULT '1' COMMENT '级别',
	`sorted` INT(5) NULL DEFAULT '1' COMMENT '排序值',
	`create_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`create_uid` INT(11) NULL DEFAULT '1' COMMENT '创建用户ID',
	`create_user` VARCHAR(50) NULL DEFAULT '' COMMENT '创建人',
	`modify_time` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
)
COMMENT='功能权限表',ENGINE=InnoDB;

/** 角色表 **/
CREATE TABLE `t_role` (
	`id` INT(11) NOT NULL AUTO_INCREMENT primary key COMMENT '主键ID',
	`name` VARCHAR(100) NOT NULL COMMENT '角色名称',
	`code` VARCHAR(100) NOT NULL COMMENT '角色编号',
	`type` INT(5) NULL DEFAULT '0'  COMMENT '角色类型',
	`sorted` INT(11) NULL DEFAULT '1' COMMENT '排序值',
	`status` INT(2) NULL DEFAULT '1' COMMENT '状态:1:启用;0:停用',
	`describe` VARCHAR(255) NULL DEFAULT '' COMMENT '角色描述',
	`create_uid` INT(11) NULL DEFAULT NULL COMMENT '创建用户ID',
	`create_user` VARCHAR(100) NULL DEFAULT '' COMMENT '创建人',
	`create_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`modify_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间'
)
COMMENT='角色表',ENGINE=InnoDB;

/** 角色权限关系表 **/
CREATE TABLE `t_role_permission` (
	`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	`role_id` INT(11) NULL DEFAULT NULL COMMENT '角色id',
	`permission_id` INT(11) NULL DEFAULT NULL COMMENT '权限id',
	`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`create_uid` INT(11) NULL DEFAULT NULL COMMENT '创建用户ID',
	`create_user` VARCHAR(100) NULL DEFAULT '' COMMENT '创建人'
)
COMMENT='角色权限关联表',ENGINE=InnoDB;

/** 用户表 **/
CREATE TABLE `t_user` (
	`id` INT(11) NOT NULL AUTO_INCREMENT primary key COMMENT '主键ID',
	`username` VARCHAR(60) NOT NULL UNIQUE COMMENT '登录用户名',
	`password` VARCHAR(255) NOT NULL COMMENT '登录密码',
	`type` INT(5) NULL DEFAULT '0' COMMENT '用户类型',
	`real_name` VARCHAR(60) NULL DEFAULT '0' COMMENT '用户真实名称',
	`nick_name` VARCHAR(60) NULL DEFAULT '1' COMMENT '用户昵称',
	`avatar` VARCHAR(255) NULL DEFAULT NULL COMMENT '用户头像',
	`gender` INT(5) NULL DEFAULT '0' COMMENT '用户性别,0:未知,1 男 2 女',
	`phone` VARCHAR(30) NULL DEFAULT '' COMMENT '用户电话',
	`mobile` VARCHAR(30) NULL DEFAULT '' COMMENT '用户手机号',
	`email` VARCHAR(60) NULL DEFAULT '' COMMENT '用户邮箱',
	`status` INT(1) NULL DEFAULT '0' COMMENT '用户状态: 0:停用、1:正常',
	`job_number` VARCHAR(50) NULL DEFAULT ''  COMMENT '用户工号',
	`id_number` VARCHAR(30) NULL DEFAULT ''  COMMENT '用户身份证号码',
	`work_title` VARCHAR(50) NULL DEFAULT NULL COMMENT '工作职称',
	`work_post` VARCHAR(50) NULL DEFAULT NULL COMMENT '工作职位',
	`work_role` VARCHAR(100) NULL DEFAULT NULL COMMENT '工作角色',
	`describe` VARCHAR(35) NULL DEFAULT ''  COMMENT '用户描述',
	`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`create_uid` INT(11) NULL DEFAULT NULL COMMENT '创建用户ID',
	`create_user` VARCHAR(100) NULL DEFAULT '' COMMENT '创建人',
	`modify_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
	`logic_deleted` INT(1) NULL DEFAULT '0' COMMENT '0,正常 1,已删除'
)
COMMENT='用户表' ENGINE=InnoDB;

/** 用户角色关系表 **/
CREATE TABLE `t_user_role` (
	`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	`user_id` INT(11) COMMENT '用户id',
	`role_id` INT(11) COMMENT '角色id',
	`create_uid` INT(11) COMMENT '创建用户ID',
	`create_user` VARCHAR(50) NULL DEFAULT '' COMMENT '创建人',
	`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
)
COMMENT='用户角色关联表',ENGINE=InnoDB;


http://www.kler.cn/a/469192.html

相关文章:

  • 小程序26-事件绑定和事件对象
  • 【C++】构造函数与析构函数
  • 详解GPT-信息抽取任务 (GPT-3 FAMILY LARGE LANGUAGE MODELS)
  • 计算机网络--路由表的更新
  • Spring boot接入xxl-job
  • 【.NET】Kafka消息队列介绍,使用Confluent.Kafka集成Kafka消息队列
  • 详解云桌面3种主流架构
  • 前端编码技巧与规范
  • 结合前端的响应式开发深入理解设备像素比
  • 【MyBatis源码分析】Spring与MyBatis整合深入解析
  • 8. C++ 面向对象之特性一(封装)
  • Arm Cortex - M3 MCU 全流程设计:从前端到后端全方位掌握
  • Transformer:如何颠覆深度学习格局并引领AI的未来
  • 青少年编程与数学 02-006 前端开发框架VUE 08课题、列表渲染
  • 偏振测量——典型光学元件的穆勒矩阵
  • 使用Python实现健康跟踪应用:打造智能健康管理助手
  • 基于深度学习的视觉检测小项目(六) 项目的信号和变量的规划
  • sqlserver数据库备份和还原
  • 计算机网络(第8版)第3章--PPP课后习题
  • ESP32-C3 入门笔记08:多帧数据解析
  • Linux网络命令
  • 网络安全技能试题总结参考
  • 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(24):椭圆曲线密码学
  • Kotlin 协程基础知识总结七 —— Flow 与 Jetpack Paging3
  • 如何实现一个充满科技感的官网(二)
  • AWS DMS基础知识