本系统基于角色,细粒度控制到按钮权限,用户属于某个部门,用户扮演什么角色,可以一对多,权限分配给相关角色就赋予用户相关角色权限。以下是表设计。下一期会写具体代码实现。
部门表:根据公司组织架构,部门是分层次得。顶层部门、一级主管部门,二级部门。(举个栗子:业务部:业务一部,业务二部)
CREATE TABLE `t_department`(
`department_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '部门ID',
`department_name` VARCHAR(56) DEFAULT NULL COMMENT '部门名称',
`parent_id` INT(11) DEFAULT NULL COMMENT '上级部门id',
`level` INT(2) DEFAULT 1 COMMENT '部门等级',
PRIMARY KEY (`department_id`)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
用户表:用户属于某个部门
CREATE TABLE `t_user` (
`user_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`login_time` DATETIME DEFAULT NULL COMMENT '登录时间',
`name` VARCHAR(56) DEFAULT NULL COMMENT '用户名称',
`login_name` VARCHAR(56) DEFAULT NULL COMMENT '登录名称',
`password` VARCHAR(255) DEFAULT NULL COMMENT '登录密码',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`user_status` INT(2) DEFAULT 1 COMMENT '用户状态(0禁用,1启用)',
`department_id` INT(11) DEFAULT NULL COMMENT '部门id',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`create_user` DATETIME DEFAULT NULL COMMENT '创建人',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
`update_user` DATETIME DEFAULT NULL COMMENT '更新人员',
PRIMARY KEY (`user_id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
角色表:
CREATE TABLE `t_role` (
`role_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '角色id',
`role_name` VARCHAR(56) DEFAULT NULL COMMENT '角色名称',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`role_id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
用户与角色关系表:
CREATE TABLE `t_user_role` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`role_id` INT(11) NOT NULL COMMENT '角色id',
`user_id` INT(11) NOT NULL COMMENT '用户id',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
菜单表:
CREATE TABLE `t_menu` (
`menu_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '菜单id',
`menu_name` VARCHAR(56) DEFAULT NULL COMMENT '菜单名称',
`menu_url` VARCHAR(255) DEFAULT NULL COMMENT '菜单url',
`parent_id` INT(11) DEFAULT NULL COMMENT '父菜单id',
`level` INT(2) DEFAULT 1 COMMENT '菜单级别(一级菜单,二级菜单,三级菜单)',
`menu_status` INT(1) DEFAULT 0 COMMENT '菜单状态(1启用,0禁用)',
PRIMARY KEY (`menu_id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
按钮表:按钮可能属于某个菜单,也可能不属于某个菜单
CREATE TABLE `t_operation` (
`btn_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '按钮id',
`btn_code` VARCHAR(56) DEFAULT NULL COMMENT '按钮编号',
`btn_name` VARCHAR(56) DEFAULT NULL COMMENT '按钮名称',
`btn_title` VARCHAR(56) DEFAULT NULL COMMENT '按钮标题',
`menu_id` INT(11) DEFAULT NULL COMMENT '菜单id',
PRIMARY KEY (`btn_id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
授权表:将菜单和按钮分配给相关角色,某个角色可能有某个菜单得权限不一定有某个菜单下按钮得角色,如果某用户没有菜单权限,那么该用户就没有该菜单下得按钮得权限。
CREATE TABLE `t_author` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`role_id` INT(11) DEFAULT NULL COMMENT '角色id',
`resource_id` INT(11) DEFAULT NULL COMMENT '资源id(根据资源类型判断是按钮还是菜单)',
`resource_type` INT(2) DEFAULT 0 COMMENT '资源类型(0菜单,1按钮)',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;