天天看点

【RBAC基于角色的权限控制(一)】RBAC权限数据库设计

-- 管理员->权限表
DROP TABLE IF EXISTS `b_admin_permissions`;
CREATE TABLE `b_admin_permissions` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `name` varchar(64) NOT NULL DEFAULT '' COMMENT '权限名称',
  `controller` varchar(32) NOT NULL DEFAULT '' COMMENT '控制器',
  `action` varchar(32) NOT NULL DEFAULT '' COMMENT '方法',
  `description` varchar(255) NOT NULL DEFAULT '' COMMENT '描述',
  `pid` int(10) NOT NULL DEFAULT '0' COMMENT '父ID 0-顶级',
  `level` tinyint(1) NOT NULL DEFAULT '0' COMMENT '权限级别:0-顶级 1-一级',
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除 0-否 1-是',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '管理员->权限表';

-- 管理员->角色表
DROP TABLE IF EXISTS `b_admin_roles`;
CREATE TABLE `b_admin_roles` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `name` varchar(64) NOT NULL DEFAULT '' COMMENT '角色名称',
  `description` varchar(255) NOT NULL DEFAULT '' COMMENT '角色描述',
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除 0-否 1-是',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '管理员->角色表';

-- 管理员->角色->权限表
DROP TABLE IF EXISTS `b_admin_role_permissions`;
CREATE TABLE `b_admin_role_permissions` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `role_id` int(10) NOT NULL DEFAULT '0' COMMENT '角色ID',
  `permission_id` int(10) NOT NULL DEFAULT '0' COMMENT '权限ID',
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除 0-否 1-是',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '管理员->角色->权限表';

-- 管理员表
DROP TABLE IF EXISTS `b_admins`;
CREATE TABLE `b_admins` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `username` varchar(64) NOT NULL COMMENT '用户名',
  `password` char(32) NOT NULL COMMENT '密码',
  `nickname` varchar(32) NOT NULL DEFAULT '' COMMENT '昵称',
  `realname` varchar(32) NOT NULL DEFAULT '' COMMENT '真实姓名',
  `role_id` int(10) NOT NULL COMMENT '角色ID 0-超级管理员',
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除 0-否 1-是',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '管理员表';

-- 管理员->操作记录表
DROP TABLE IF EXISTS `b_admin_operation_records`;
CREATE TABLE `b_admin_operation_records` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `username` varchar(64) NOT NULL COMMENT '用户名',
  `type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '操作类型 0-未知 1-新增 2-修改 3-删除',
  `module_name` varchar(64) NOT NULL DEFAULT '模块名',
  `id_container` varchar(32) NOT NULL DEFAULT '' COMMENT '主键',
  `description` varchar(1000) NOT NULL DEFAULT '' COMMENT '操作描述',
  `remark` text DEFAULT NULL COMMENT '备注',
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除 0-否 1-是',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '管理员->操作记录表';

-- 管理员->会话表
DROP TABLE IF EXISTS `b_admin_sessions`;
CREATE TABLE `b_admin_sessions` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `session` char(32) NOT NULL DEFAULT '' COMMENT '会话ID',
  `login_ip` char(15) NOT NULL DEFAULT '' COMMENT '登录IP',
  `login_time` datetime NOT NULL DEFAULT '0000-01-01 00:00:00' COMMENT '登录时间',
  `admin_id` int(10) NOT NULL DEFAULT '0' COMMENT '管理员ID',
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除 0-否 1-是',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_session` (`session`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '管理员->会话表';