菜单表设计
菜单表是核心功能,不同权限的用户获取不同的菜单
设计图
schema 设计
prisma
// sys_menu
model Menu {
id Int @id @default(autoincrement()) @map("id")
name String @map("name")
type Int @map("type")
description String? @map("description")
remark String? @map("remark")
icon String? @map("icon")
path String? @map("path")
path_file String? @map("path_file")
status Int? @map("status")
isShow Int? @map("isShow")
isCache Int? @map("isCache")
permission String? @map("permission")
isLink Int? @map("isLink")
orderNo Int? @map("order_no")
createdAt DateTime @default(now()) @map("createdAt")
updatedAt DateTime? @map("updatedAt")
MenuRole MenuRole[]
parent_menu_id Int? @map("parent_menu_id")
parent_menu Menu? @relation("ParentMenuToChildMenus", fields: [parent_menu_id], references: [id], onDelete: SetNull, onUpdate: Cascade)
children_menu Menu[] @relation("ParentMenuToChildMenus")
@@map("sys_menu")
}
// sys_menu_role
model MenuRole {
id Int @id @default(autoincrement()) @map("id")
roleId Int @map("role_id")
menuId Int @map("menu_id")
createdAt DateTime @default(now()) @map("createdAt")
updatedAt DateTime? @map("updatedAt")
roles Role @relation(fields: [roleId], references: [id], onDelete: Restrict, onUpdate: Cascade)
menus Menu @relation(fields: [menuId], references: [id], onDelete: Restrict, onUpdate: Cascade)
@@map("sys_menu_role")
}
在权限设计过程中,我们重点关注 Menu 表和 MenuRole 表。
MenuRole
MenuRole 菜单和角色的中间表。我们在角色与菜单不直接关联,而是使用中间表进行关联。