最简单基于RBAC权限系统数据库结构设计  

包括如下几个表  

1. 用户表  

-- Table "t_user" DDL  

CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) DEFAULT NULL,
`password` varchar(100) DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
`status` int(11) DEFAULT '0',
`department_id` int(11) DEFAULT NULL,
`desc` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 2. 权限表 -- Table "t_permission" DDL CREATE TABLE `t_permission` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`desc` varchar(255) DEFAULT NULL,
`status` int(11) DEFAULT NULL,
`is_menu_display` int(11) DEFAULT NULL,
`menu_url` varchar(255) DEFAULT NULL,
`main_menu_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 3. 角色表 -- Table "t_role" DDL CREATE TABLE `t_role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`desc` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4. 用户角色表 -- Table "t_user_role" DDL CREATE TABLE `t_user_role` (
`user_id` int(11) NOT NULL DEFAULT '0',
`role_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`user_id`,`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 5. 角色权限表 -- Table "t_role_permission" DDL CREATE TABLE `t_role_permission` (
`role_id` int(11) NOT NULL DEFAULT '0',
`permission_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`role_id`,`permission_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6. 菜单表 -- Table "t_menu" DDL CREATE TABLE `t_menu` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`desc` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 7. 部门表 -- Table "t_department" DDL CREATE TABLE `t_department` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`desc` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 涉及的主要sql: 1. 获取某个用户的权限列表: select * from t_permission where id in (select distinct permission_id from t_role_permission where role_id in ( select role_id from t_user_role where user_id=1)) 2. 主菜单列表:(菜单) select * from t_menu where id in (
select distinct main_menu_id from t_permission where id in (1,2,3,4)) 3. 某个主菜单下的子菜单列表: select * from t_permission where id in (1,2,3,4) and main_menu_id=1 select * from t_permission where id in (1,2,3,4) and main_menu_id=2

测试数据:

INSERT INTO `t_department` VALUES ('1', '技术部', '技术部');
INSERT INTO `t_department` VALUES ('2', '财务部', '财务部');
INSERT INTO `t_department` VALUES ('3', '设计部', '设计部');
INSERT INTO `t_menu` VALUES ('1', '系统管理', '系统管理');
INSERT INTO `t_menu` VALUES ('2', '财务管理', '财务管理');
INSERT INTO `t_menu` VALUES ('3', '部门管理', '部门管理');
INSERT INTO `t_menu` VALUES ('4', '日志管理', '日志管理');
INSERT INTO `t_menu` VALUES ('5', '角色管理', '角色管理');
INSERT INTO `t_permission` VALUES ('1', '用户列表', '用户列表', '0', '1', 'userlist.do', '1');
INSERT INTO `t_permission` VALUES ('2', '用户新增', '用户新增', '0', '1', 'useradd.do', '1');
INSERT INTO `t_permission` VALUES ('3', '用户修改', '用户修改', '0', '1', 'userModify.do', '1');
INSERT INTO `t_permission` VALUES ('4', '用户删除', '用户删除', '0', '1', 'userDel.do', '2');
INSERT INTO `t_permission` VALUES ('5', '用户查询', '用户查询', '0', '1', 'userSearch.do', '3');
INSERT INTO `t_role` VALUES ('1', '系统管理员', '系统管理员');
INSERT INTO `t_role` VALUES ('2', '测试角色1', '测试角色1');
INSERT INTO `t_role` VALUES ('3', '测试角色2', '测试角色2');
INSERT INTO `t_role_permission` VALUES ('1', '1');
INSERT INTO `t_role_permission` VALUES ('1', '2');
INSERT INTO `t_role_permission` VALUES ('1', '3');
INSERT INTO `t_role_permission` VALUES ('2', '2');
INSERT INTO `t_role_permission` VALUES ('3', '4');
INSERT INTO `t_user` VALUES ('1', 'admin', 'admin', '管理员', '0', '1', '管理员');
INSERT INTO `t_user_role` VALUES ('1', '1');
INSERT INTO `t_user_role` VALUES ('1', '2');
INSERT INTO `t_user_role` VALUES ('1', '3');

TP支持菜单动态生成RBAC权限系统数据库结构设计方案的更多相关文章

  1. phpcms中的RBAC权限系统

    PHPCMS中的RBAC权限系统主要用到了4张数据表:管理员表,角色表,菜单表,菜单权限表.先来看看数据库的数据表结构: admin 管理员表 ID 字段 类型 Null 默认 索引 额外 注释 1 ...

  2. .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转

    .net mvc 站点自带简易SSL加密传输   因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...

  3. [转]Spring Security 可动态授权RBAC权限模块实践

    RBAC:基于角色的访问控制(Role-Based Access Control) 先在web.xml 中配置一个过滤器(必须在Struts的过滤器之前) <filter> <fil ...

  4. 基于SSM的RBAC权限系统(1)-利用ajax,bootstrap,ztree完成权限树功能

    仅支持回显以及选择,不支持在树中的编辑 搭建后台回显以及修改的模块 JSON数据封装 public class Msg { private int code; private String msg; ...

  5. Word报告自动生成(例如 导出数据库结构)

    将很早之前写的一个小组件重新整理优化一下,做成一个通用的功能.适用于导出数据库的结构(表.字段等)到Word或将体检数据自动生成Word版的体检报告等.代码:Github 一.主要需要完成功能: 1. ...

  6. ecshop php商城系统数据库结构及表的介绍分析

      ecshop共86张表,确实比较多,不过功能确实最完善的. 表结构分析 ecs_account_log // 用户账目日志表 ecs_activity // 活动表(代码,名称,开始,结束,描述) ...

  7. 巨蟒django之权限7:动态生成一级&&二级菜单

    内容回顾: . 权限的控制 . 表结构设计 存权限的信息 用户表 - name 用户名 - pwd 密码 - roles 多对多 角色表 - name - permissions 多对多 权限表 - ...

  8. MVC5+EF6 入门完整教程13 -- 动态生成多级菜单

    稍微有一定复杂性的系统,多级菜单都是一个必备组件. 本篇专题讲述如何生成动态多级菜单的通用做法. 我们不用任何第三方的组件,完全自己构建灵活通用的多级菜单. 需要达成的效果:容易复用,可以根据mode ...

  9. CRM项目之RBAC权限组件-day26

    写在前面 上课第26天,打卡: 世间安得双全法 不负如来不负卿 s17day26 CRM项目 项目概要:XX公司CRM - 权限管理,公共组件,app ***** - 熟悉增删改查,Low *** - ...

随机推荐

  1. js时间戳转换时间、距当前时间

    // 1.时间戳转化成时间格式 function getTime(times) { return new Date(parseInt(times) * 1000).toLocaleString().r ...

  2. postcss那些事儿

    一.sass和postcsssass.less.stylus,三者是css预处理器,使用预编码来处理css,然后编译成线上需要的css.postcss是处理你写好的css,让你的css更健康,对浏览器 ...

  3. thumbs.db是什么文件

    thumbs.db是什么文件  这是图片缓存文件 Thumbs.db文件是一个数据库,里面保存了这个目录下所有图像文件的缩略图(格式为jpeg) thumbs.db删除不掉 反射获取某个类的 所有字段 ...

  4. Python面向对象——多态

    多态的作用 调用不同的子类将会产生不同的行为. 多态是在继承上实现的. 图解多态1 图解多态2 图解多态1代码 class AudioFile: def __init__(self, filename ...

  5. Shiro笔记(五)JSP标签

    Shiro笔记(五)JSP标签 导入标签库 <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags&q ...

  6. 28BYJ-48步进电机

    28BYJ-48步进电机:1.步进电机是一种将电脉冲转化为角位移的执行机构. 2.通俗一点讲:当步进驱动器接收到 一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角). 3.通过控 ...

  7. NOIP 2006 作业调度方案

    [问题描述] 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间. 每个工件的每个工序称为一个操作,我们用记号j-k表示 ...

  8. PHP Redis 对象方法手册

    redis(Remote Dictionary Server)是一种Nosql技术,它是一个开源的高级kv存储和数据结构存储系统. redis不仅仅是能够存储key和value这种简单的键值对,还能存 ...

  9. java之静态方法与非静态方法

    1.静态方法最大的特点就是,不用生成类的实例对象,直接可以用. 2.它的语法格式:<类名|实例名>.<类变量名> 3.Java中的静态方法中,在方法声明时前面要加static ...

  10. mod_wsgi的工作模式和配置

    Openstack所有提供API接口的服务都是python web server,而其本身性能很弱,目前已经将它们配置到了apache上.但对于如何设置mod_wsgi的参数,我一直没有好好去阅读其文 ...