RBAC从零开始--数据库表设计

来源:互联网 发布:人工智能 医学 编辑:程序博客网 时间:2024/05/13 23:35

  RBAC(基于角色的权限访问控制),很明显要有角色表、权限表,当然用户表是不能少的,在加上两张关联表,用户角色表(这里一个用户只对应一个角色,按道理可以整合一张表,在用户表里加上一个角色id),角色权限表。此外,还要设计一张用户操作信息日志表,记录用户的操作信息。


用户表
角色表
权限表
用户角色表
角色权限表
操作信息日志表

注:所有的数据字段都为非空字段,设有默认值,每个字段都加有注释


用户表的DDL

CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',  `name` varchar(20) NOT NULL DEFAULT '' COMMENT '用户名',  `email` varchar(36) NOT NULL DEFAULT '' COMMENT '用户邮箱',  `is_admin` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否为超级管理员1:是、0:否,默认不是',  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '该条记录是否有效1:有效、0:无效',  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

角色表DDL

CREATE TABLE `role` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色id',  `name` varchar(64) NOT NULL DEFAULT '' COMMENT '角色名',  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '该记录是否有效1:有效、0:无效',  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

权限表DDL

CREATE TABLE `access` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '权限id',  `title` varchar(64) NOT NULL DEFAULT '' COMMENT '权限标题',  `uris` varchar(1000) NOT NULL DEFAULT '' COMMENT '权限路径',  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '该记录是否有效1:有效、0:无效',  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

用户角色表DDL

CREATE TABLE `user_role` (  `id` int(11) NOT NULL COMMENT '主键',  `uid` int(11) NOT NULL DEFAULT '0' COMMENT '用户id',  `role_id` int(11) NOT NULL DEFAULT '0' COMMENT '角色id',  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

角色权限表DDL

CREATE TABLE `role_access` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',  `role_id` int(11) NOT NULL DEFAULT '0' COMMENT '角色id',  `access_id` int(11) NOT NULL DEFAULT '0' COMMENT '权限id',  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

操作信息日志表DDL

CREATE TABLE `operate_log_info` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',  `uid` int(11) NOT NULL DEFAULT '0' COMMENT '操作用户id',  `uname` varchar(64) NOT NULL DEFAULT '' COMMENT '操作用户名',  `from_ip` varchar(64) NOT NULL DEFAULT '' COMMENT '操作人的机器ip',  `operate_func` varchar(255) NOT NULL DEFAULT '' COMMENT '操作的功能,例如:登录、插入记录等等',  `visit_method` varchar(255) NOT NULL DEFAULT '' COMMENT '调用入口的方法',  `method_cost_time` varchar(255) NOT NULL DEFAULT '' COMMENT '访问方法所花费的时间',  `log_type` varchar(32) NOT NULL DEFAULT '' COMMENT '日志类型:error/info/warn',  `uri` varchar(255) NOT NULL DEFAULT '' COMMENT '访问路径',  `method` varchar(16) NOT NULL DEFAULT '' COMMENT '请求方法:post/get/put/delete/head',  `visit_method_error_info` varchar(1000) NOT NULL DEFAULT '' COMMENT '访问方法的错误信息',  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '该记录是否有效,1:有效、0:无效',  `login_out_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '登录时间',  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

下篇将完成所有配置文件的配置,让空项目跑起来(一步、一步两步)!

原创粉丝点击