信息系统的权限设置是一个重要的话题,好的权限设计能够让系统具有良好的可扩展性,也就是千人千面效果。糟糕的权限管理往往使得开发人员面临复杂的工作压力,很多开发人员工作了好几年都没整明白权限到底是哪里控制的,甚至还沉浸在仰望的岁月里。但是仔细梳理我们发现,权限就是不断微分的方法,资源要整合到不同的菜单里必然产生一张关联表,而菜单要整合到不同的角色中,同样产生一张角色到菜单的关联表。当分析到角色的时候也就是对应到我们的用户表了。
也就是权限管理的表主要包含:资源表(前端页面)、菜单表(菜单目录)、资源-菜单关系表(解耦)、角色表、角色-菜单表关系表(解耦)、用户表。
既然权限管理这么简单,那就手撸一个吧!
-- 建库
create database scaffold;
use scaffold;
-- 创建资源表,页面部分
CREATE TABLE resource (
id int not null primary key auto_increment,
resourcename varchar(64) COMMENT '资源名称',
resourceurl varchar(64) COMMENT '资源路径h5',
content varchar(128) COMMENT '资源描述',
flag varchar(64) COMMENT '其他标志'
)ENGINE=InnoDB;
-- 菜单表
CREATE TABLE tmenu (
id int not null primary key auto_increment,
mununame varchar(64) NOT NULL COMMENT '菜单名称',
content varchar(128) COMMENT '菜单描述',
flag varchar(64) COMMENT '标志'
)ENGINE=InnoDB;
-- 菜单与资源的关系表
CREATE TABLE menu_resource (
id int not null primary key auto_increment,
menusid int COMMENT '菜单id',
resourcesid int COMMENT '资源id',
CONSTRAINT m_tmenu FOREIGN KEY (menusid) REFERENCES tmenu (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT m_resources FOREIGN KEY (resourcesid) REFERENCES resource (id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB;
-- 角色表
CREATE TABLE role (
id int NOT NULL PRIMARY KEY auto_increment,
rolename varchar(64) COMMENT '角色名称',
menuid varchar(64) COMMENT '菜单id',
content varchar(128) COMMENT '内容描述',
flag varchar(64) COMMENT '标志'
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 角色菜单表
CREATE TABLE role_menu (
id int not null primary key auto_increment,
roid int COMMENT '角色id',
tmid int COMMENT '菜单id',
CONSTRAINT role_r_tm FOREIGN KEY (roid) REFERENCES role (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT role_tm1 FOREIGN KEY (tmid) REFERENCES tmenu (id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 用户表
CREATE TABLE user (
id int primary key not null auto_increment,
loginid varchar(128) NOT NULL COMMENT '用户登录号,手机号',
username varchar(64) not null COMMENT '用户名称',
userpassword varchar(64) not null COMMENT '用户密码',
useremil varchar(64) COMMENT '用户电子邮箱',
roid int not null COMMENT '用户权限标志',
CONSTRAINT user_role FOREIGN KEY (roid) REFERENCES role (id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
权限管理模块开发完毕大概就长这个样子,是不是有一点靓?相关源码已经放到github上了,欢迎大家给我一颗小星星
。https://github.com/tianjingle/Scaffold