帮我设计一套完整的RBAC体系表结构,包含用户表、角色表、菜单表、部门表,支持权限控制和数据权限
时间: 2023-02-11 17:55:36 浏览: 904
RBAC (基于角色的访问控制) 的表结构可以包括以下几个部分:
1. 用户表 (users): 存储用户的基本信息,如用户名、密码、邮箱等。
2. 角色表 (roles): 存储角色的基本信息,如角色名称、描述等。
3. 用户角色关系表 (user_role): 记录用户和角色之间的对应关系。
4. 菜单表 (menus): 存储菜单的基本信息,如菜单名称、链接、图标等。
5. 角色菜单关系表 (role_menu): 记录角色和菜单之间的对应关系,即角色对应的菜单权限。
6. 部门表 (departments): 存储部门的基本信息,如部门名称、描述等。
7. 用户部门关系表 (user_department):记录用户和部门之间的对应关系,即用户所属部门。
8. 数据权限表 (data_permission):记录角色对应的数据权限范围,如部门、时间等。
通过这些表的关系,可以实现对用户的权限控制和数据权限的控制。
相关问题
用RBAC创建一套完整的RBAC体系表结构,包含用户表、角色表、菜单表、部门表,支持权限控制和数据权限MySQL表
好的,以下是一个基于MySQL的RBAC体系表结构:
1. 用户表(user)
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(255) NOT NULL COMMENT '密码',
`email` varchar(50) DEFAULT NULL COMMENT '电子邮箱',
`phone` varchar(20) DEFAULT NULL COMMENT '手机号码',
`status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '用户状态,0表示禁用,1表示启用',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `username_unique` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
2. 角色表(role)
CREATE TABLE `role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色ID',
`name` varchar(50) NOT NULL COMMENT '角色名称',
`description` varchar(255) DEFAULT NULL COMMENT '角色描述',
`status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '角色状态,0表示禁用,1表示启用',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `name_unique` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
3. 菜单表(menu)
CREATE TABLE `menu` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
`name` varchar(50) NOT NULL COMMENT '菜单名称',
`url` varchar(255) DEFAULT NULL COMMENT '菜单URL',
`icon` varchar(50) DEFAULT NULL COMMENT '菜单图标',
`parent_id` bigint(20) DEFAULT NULL COMMENT '父菜单ID',
`order_num` int(11) DEFAULT '0' COMMENT '排序号',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菜单表';
4. 部门表(department)
CREATE TABLE `department` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门ID',
`name` varchar(50) NOT NULL COMMENT '部门名称',
`parent_id` bigint(20) DEFAULT NULL COMMENT '父部门ID',
`order_num` int(11) DEFAULT '0' COMMENT '排序号',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门表';
5. 用户角色关系表(user_role)
CREATE TABLE `user_role` (
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
PRIMARY KEY (`user_id`,`role_id`),
KEY `role_id` (`role_id`),
CONSTRAINT `user_role_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `user_role_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关系表';
6. 角色菜单关系表(role_menu)
CREATE TABLE `role_menu` (
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
`menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
PRIMARY KEY (`role_id`,`menu_id`),
KEY `menu_id` (`menu_id`),
CONSTRAINT `role_menu_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `role_menu_ibfk_2` FOREIGN KEY (`menu_id`) REFERENCES `menu` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色菜单关系表';
7. 角色部门关系表(role_department)
CREATE TABLE `role_department` (
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
`department_id` bigint(20) NOT NULL COMMENT '部门ID',
PRIMARY KEY (`role_id`,`department_id`),
KEY `department_id` (`department_id`),
CONSTRAINT `role_department_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `role_department_ibfk_2` FOREIGN KEY (`department_id`) REFERENCES `department` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色部门关系表';
这些表结构可以支持权限控制和数据权限,具体实现方式需要根据具体业务需求来调整。
用TypeORM和RBAC创建一套完整的RBAC体系表结构,包含用户表、角色表、菜单表、部门表,支持权限控制和数据权限MySQL表
好的,我可以为您解答这个问题。
首先,我们需要定义各个表的结构,然后使用 TypeORM 来创建这些表。这里我假设您已经安装了 TypeORM 和 MySQL 驱动程序。以下是表结构和 TypeORM 实体类的定义:
用户表 User:
```typescript
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
username: string;
@Column()
password: string;
@Column()
roleId: number;
// ...
}
```
角色表 Role:
```typescript
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Role {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
// ...
}
```
菜单表 Menu:
```typescript
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Menu {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
parentId: number;
@Column()
path: string;
// ...
}
```
部门表 Department:
```typescript
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Department {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
parentId: number;
// ...
}
```
然后,我们需要为这些实体类创建对应的数据库表。在 TypeORM 中,可以使用 synchronize 方法自动创建表,或者使用 migration 来手动创建表。
```typescript
import { createConnection } from 'typeorm';
import { User } from './entities/user.entity';
import { Role } from './entities/role.entity';
import { Menu } from './entities/menu.entity';
import { Department } from './entities/department.entity';
createConnection()
.then(async (connection) => {
await connection.synchronize();
console.log('Database tables created!');
})
.catch((error) => console.log(error));
```
接下来,我们需要实现 RBAC(Role-Based Access Control)的功能,即角色基础访问控制。我们可以为每个用户分配一个角色,然后为每个角色分配一组权限。
在 User 实体类中,我们添加一个 roleId 字段,用于存储用户所属的角色。在 Role 实体类中,我们添加一个 permissions 字段,用于存储该角色拥有的权限。
```typescript
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Role {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
permissions: string;
// ...
}
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
username: string;
@Column()
password: string;
@Column()
roleId: number;
// ...
}
```
接下来,我们需要实现权限控制。我们可以为每个菜单和部门定义一个权限码,然后在 Role 实体类中存储该角色所拥有的权限码。在实际应用中,还可以根据需要定义更多的权限码。
```typescript
enum MenuPermission {
VIEW = 'menu_view',
ADD = 'menu_add',
EDIT = 'menu_edit',
DELETE = 'menu_delete',
}
enum DepartmentPermission {
VIEW = 'department_view',
ADD = 'department_add',
EDIT = 'department_edit',
DELETE = 'department_delete',
}
@Entity()
export class Role {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
menuPermissions: string;
@Column()
departmentPermissions: string;
// ...
}
@Entity()
export class Menu {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
parentId: number;
@Column()
path: string;
@Column()
permission: string;
// ...
}
@Entity()
export class Department {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
parentId: number;
@Column()
permission: string;
// ...
}
```
最后,我们需要实现数据权限。我们可以为每个部门定义一个数据权限码,然后在 User 实体类中存储该用户所属部门的数据权限码。在实际应用中,还可以根据需要定义更多的数据权限码。
```typescript
enum DepartmentDataPermission {
SELF = 'department_self',
CHILDREN = 'department_children',
ALL = 'department_all',
}
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
username: string;
@Column()
password: string;
@Column()
roleId: number;
@Column()
departmentDataPermission: string;
// ...
}
@Entity()
export class Department {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
parentId: number;
@Column()
permission: string;
@Column()
dataPermission: string;
// ...
}
```
这样,我们就创建了一套完整的 RBAC(Role-Based Access Control)体系表结构,包含用户表、角色表、菜单表、部门表,支持权限控制和数据权限。您可以根据实际需求来调整和完善这些表结构和实体类定义。
阅读全文