最简单基于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. git一些实践命令,关于reabse和merge的区别在最后做了一个比较

    git命令 一. 克隆,提交,拉取代码 1. 克隆,提交代码 git clone:远端仓库地址 git remote add upstream: 上游远端仓库地址(fork代码的原地址).添加上游远端 ...

  2. Java 复习

    基础: JAVA基础扎实,理解io.多线程.集合等基础框架,对JVM原理有一定的了解: 熟读Java SDK源码: 框架: 对Spring,ibatis,struts等开源框架熟悉:

  3. XenServer日志清理方法

    服务器使用时间长了,XenServer产生了很多日志,甚至有些人因为日志占满了空间, 导致系统出现问题:xapi崩溃,或者系统卡死,重启也无效. 所以我们要时常看看日志是否占的空间的,清理下日志先查看 ...

  4. jsp导出简单的excel

    在jsp中加入以下代码即可 <% String fileName = "导出excel.xls"; fileName = new String(fileName.getByt ...

  5. 垃圾收集器与内存分配策略-HotSpot算法实现

    ①枚举根节点 可达性分析中,查找引用链这个操作,可作为GC Roots的节点主要在全局性的引用中(例如常量和静态属性)和执行上下文(例如栈帧中的本地变量表)中,现在很多应用本地方法区就有数百找,要一个 ...

  6. js获取判断苹果手机机型

    原先获取不了苹果系列的型号,但转换思路,先判断是否是苹果,再用分辨率获取型号 //获取手机型号函数beginfunction getPhoneType(){ //正则,忽略大小写var pattern ...

  7. spring源码分析系列 (1) spring拓展接口BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor

    更多文章点击--spring源码分析系列 主要分析内容: 一.BeanFactoryPostProcessor.BeanDefinitionRegistryPostProcessor简述与demo示例 ...

  8. RxJava2学习笔记(3)

    接上回继续,今天来学习下zip(打包)操作 一.zip操作 @Test public void zipTest() { Observable.zip(Observable.create(emitter ...

  9. AngularJS中$interval的用法

    在AngularJS中$interval用来处理间歇性处理一些事情. 最常用的是: var app = angular.module("app",[]); app.controll ...

  10. C#编程(八十三)---------- 程序集的含义

    程序集的含义 一.程序集是包含一个或多个类型定义文件和资源文件的集合.它允许我们分析可重用类型的逻辑表示和物理表示. 相当于你定义了一个项目XXProject,项目存在很多文件(类,窗体,接口,资源等 ...