feat: RBAC权限管理
This commit is contained in:
@@ -57,35 +57,11 @@ CREATE TABLE "sys_permission" (
|
||||
"id" TEXT NOT NULL,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
"type" INTEGER NOT NULL,
|
||||
"name" TEXT,
|
||||
|
||||
CONSTRAINT "sys_permission_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_menu" (
|
||||
"id" TEXT NOT NULL,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"url" TEXT NOT NULL,
|
||||
"parent_id" TEXT,
|
||||
"sort" INTEGER NOT NULL DEFAULT 0,
|
||||
|
||||
CONSTRAINT "sys_menu_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_menu_permission" (
|
||||
"id" TEXT NOT NULL,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
"menu_id" TEXT NOT NULL,
|
||||
"permission_id" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "sys_menu_permission_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_role_permission" (
|
||||
"id" TEXT NOT NULL,
|
||||
@@ -97,6 +73,31 @@ CREATE TABLE "sys_role_permission" (
|
||||
CONSTRAINT "sys_role_permission_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_resource" (
|
||||
"id" TEXT NOT NULL,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"path" TEXT,
|
||||
"parent_id" TEXT,
|
||||
"sort" INTEGER NOT NULL DEFAULT 0,
|
||||
"type" INTEGER NOT NULL,
|
||||
|
||||
CONSTRAINT "sys_resource_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_resource_permission" (
|
||||
"id" TEXT NOT NULL,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
"resource_id" TEXT NOT NULL,
|
||||
"permission_id" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "sys_resource_permission_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_config" (
|
||||
"id" TEXT NOT NULL,
|
||||
@@ -125,10 +126,7 @@ CREATE INDEX "sys_user_role_user_id_idx" ON "sys_user_role"("user_id");
|
||||
CREATE INDEX "sys_user_role_role_id_idx" ON "sys_user_role"("role_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_menu_permission_menu_id_idx" ON "sys_menu_permission"("menu_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_menu_permission_permission_id_idx" ON "sys_menu_permission"("permission_id");
|
||||
CREATE UNIQUE INDEX "sys_permission_name_key" ON "sys_permission"("name");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_role_permission_role_id_idx" ON "sys_role_permission"("role_id");
|
||||
@@ -136,5 +134,17 @@ CREATE INDEX "sys_role_permission_role_id_idx" ON "sys_role_permission"("role_id
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_role_permission_permission_id_idx" ON "sys_role_permission"("permission_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "sys_resource_name_type_key" ON "sys_resource"("name", "type");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "sys_resource_path_key" ON "sys_resource"("path");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_resource_permission_resource_id_idx" ON "sys_resource_permission"("resource_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_resource_permission_permission_id_idx" ON "sys_resource_permission"("permission_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "sys_config_key_key" ON "sys_config"("key");
|
||||
@@ -77,45 +77,16 @@ model File {
|
||||
|
||||
// 权限表
|
||||
model SysPermission {
|
||||
id String @id @default(cuid()) /// 主键id
|
||||
createdAt DateTime @default(now()) @map("created_at") /// 创建时间
|
||||
updatedAt DateTime @updatedAt @map("updated_at") /// 修改时间
|
||||
type Int /// 权限类型
|
||||
sysRolePermission SysRolePermission[]
|
||||
sysMenuPermission SysMenuPermission[]
|
||||
id String @id @default(cuid()) /// 主键id
|
||||
createdAt DateTime @default(now()) @map("created_at") /// 创建时间
|
||||
updatedAt DateTime @updatedAt @map("updated_at") /// 修改时间
|
||||
name String? @unique // 权限字符
|
||||
sysRolePermission SysRolePermission[]
|
||||
sysResourcePermission SysResourcePermission[]
|
||||
|
||||
@@map("sys_permission")
|
||||
}
|
||||
|
||||
// 系统菜单表
|
||||
model SysMenu {
|
||||
id String @id @default(cuid()) /// 主键id
|
||||
createdAt DateTime @default(now()) @map("created_at") /// 创建时间
|
||||
updatedAt DateTime @updatedAt @map("updated_at") /// 修改时间
|
||||
name String
|
||||
url String
|
||||
parentId String? @map("parent_id")
|
||||
sort Int @default(0)
|
||||
sysMenuPermission SysMenuPermission[]
|
||||
|
||||
@@map("sys_menu")
|
||||
}
|
||||
|
||||
// 菜单权限关联表
|
||||
model SysMenuPermission {
|
||||
id String @id @default(cuid()) /// 主键id
|
||||
createdAt DateTime @default(now()) @map("created_at") /// 创建时间
|
||||
updatedAt DateTime @updatedAt @map("updated_at") /// 修改时间
|
||||
menuId String @map("menu_id")
|
||||
permissionId String @map("permission_id")
|
||||
menu SysMenu @relation(fields: [menuId], references: [id], onDelete: Cascade)
|
||||
permission SysPermission @relation(fields: [permissionId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([menuId])
|
||||
@@index([permissionId])
|
||||
@@map("sys_menu_permission")
|
||||
}
|
||||
|
||||
// 角色权限关联表
|
||||
model SysRolePermission {
|
||||
id String @id @default(cuid()) /// 主键id
|
||||
@@ -131,6 +102,38 @@ model SysRolePermission {
|
||||
@@map("sys_role_permission")
|
||||
}
|
||||
|
||||
// 系统资源表
|
||||
model SysResource {
|
||||
id String @id @default(cuid()) /// 主键id
|
||||
createdAt DateTime @default(now()) @map("created_at") /// 创建时间
|
||||
updatedAt DateTime @updatedAt @map("updated_at") /// 修改时间
|
||||
name String
|
||||
path String? /// 菜单或api路径
|
||||
parentId String? @map("parent_id")
|
||||
sort Int @default(0)
|
||||
type Int /// 资源类型 0:菜单 1:api
|
||||
sysResourcePermission SysResourcePermission[]
|
||||
|
||||
@@unique([name, type])
|
||||
@@unique([path])
|
||||
@@map("sys_resource")
|
||||
}
|
||||
|
||||
// 系统资源权限表
|
||||
model SysResourcePermission {
|
||||
id String @id @default(cuid()) /// 主键id
|
||||
createdAt DateTime @default(now()) @map("created_at") /// 创建时间
|
||||
updatedAt DateTime @updatedAt @map("updated_at") /// 修改时间
|
||||
resourceId String @map("resource_id")
|
||||
resource SysResource @relation(fields: [resourceId], references: [id], onDelete: Cascade)
|
||||
permissionId String @map("permission_id")
|
||||
permission SysPermission @relation(fields: [permissionId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([resourceId])
|
||||
@@index([permissionId])
|
||||
@@map("sys_resource_permission")
|
||||
}
|
||||
|
||||
// 系统配置
|
||||
model SysConfig {
|
||||
id String @id @default(cuid()) /// 主键id
|
||||
|
||||
@@ -3,6 +3,7 @@ const prisma = new PrismaClient();
|
||||
|
||||
enum PermissionType {
|
||||
Menu,
|
||||
API,
|
||||
}
|
||||
|
||||
async function main() {
|
||||
@@ -18,23 +19,25 @@ async function main() {
|
||||
},
|
||||
});
|
||||
const menus = [
|
||||
{ name: '用户管理', url: 'user' },
|
||||
{ name: '角色管理', url: 'role' },
|
||||
{ name: '菜单管理', url: 'menu' },
|
||||
{ name: '系统配置', url: 'config' },
|
||||
{ name: '用户管理', path: 'user', type: PermissionType.Menu },
|
||||
{ name: '角色管理', path: 'role', type: PermissionType.Menu },
|
||||
{ name: '菜单管理', path: 'menu', type: PermissionType.Menu },
|
||||
{ name: '系统配置', path: 'config', type: PermissionType.Menu },
|
||||
];
|
||||
|
||||
for (const menu of menus) {
|
||||
// 创建菜单
|
||||
await prisma.$transaction(async (_prisma) => {
|
||||
const { id: menuId } = await _prisma.sysMenu.create({ data: menu });
|
||||
const { id: resourceId } = await _prisma.sysResource.create({
|
||||
data: menu,
|
||||
});
|
||||
// 创建菜单权限
|
||||
const { id: permissionId } = await _prisma.sysPermission.create({
|
||||
data: { type: PermissionType.Menu },
|
||||
data: {},
|
||||
});
|
||||
// 关联权限和菜单
|
||||
await _prisma.sysMenuPermission.create({
|
||||
data: { menuId, permissionId },
|
||||
await _prisma.sysResourcePermission.create({
|
||||
data: { resourceId, permissionId },
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user