前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计一个千人千面的权限系统,我只用了10分钟

设计一个千人千面的权限系统,我只用了10分钟

作者头像
写一点笔记
发布2020-11-02 14:18:00
5220
发布2020-11-02 14:18:00
举报
文章被收录于专栏:程序员备忘录

信息系统的权限设置是一个重要的话题,好的权限设计能够让系统具有良好的可扩展性,也就是千人千面效果。糟糕的权限管理往往使得开发人员面临复杂的工作压力,很多开发人员工作了好几年都没整明白权限到底是哪里控制的,甚至还沉浸在仰望的岁月里。但是仔细梳理我们发现,权限就是不断微分的方法,资源要整合到不同的菜单里必然产生一张关联表,而菜单要整合到不同的角色中,同样产生一张角色到菜单的关联表。当分析到角色的时候也就是对应到我们的用户表了。

也就是权限管理的表主要包含:资源表(前端页面)、菜单表(菜单目录)、资源-菜单关系表(解耦)、角色表角色-菜单表关系表(解耦)、用户表。

既然权限管理这么简单,那就手撸一个吧!

代码语言:javascript
复制
-- 建库
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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员备忘录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档