• TP支持菜单动态生成RBAC权限系统数据库结构设计方案


    最简单基于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');  
  • 相关阅读:
    远程发送和接收数据流生成图片
    iTextSharp 设置 PDF 所有页面背景图功能
    iTextSharp 生成 PDF 问题集合
    C# 中 IL/MSIL , CTS , CLS , CLR , JIT 分别是什么 ?
    django创建项目2 jojo
    selenium键盘操作 jojo
    python格式化 jojo
    安装了Django后,执行djangoadmin.py无法创建工程的解决办法 jojo
    django创建项目1 jojo
    python自带模块模拟鼠标和键盘操作 jojo
  • 原文地址:https://www.cnblogs.com/kingfly/p/4156636.html
Copyright © 2020-2023  润新知