feat: RBAC
This commit is contained in:
@@ -1,14 +0,0 @@
|
||||
/*
|
||||
Warnings:
|
||||
|
||||
- A unique constraint covering the columns `[permission]` on the table `sys_resource` will be added. If there are existing duplicate values, this will fail.
|
||||
|
||||
*/
|
||||
-- DropIndex
|
||||
DROP INDEX "sys_resource_name_type_key";
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "sys_resource" ADD COLUMN "permission" TEXT;
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "sys_resource_permission_key" ON "sys_resource"("permission");
|
||||
@@ -80,6 +80,7 @@ CREATE TABLE "sys_resource" (
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"path" TEXT,
|
||||
"permission_key" TEXT,
|
||||
"parent_id" TEXT,
|
||||
"sort" INTEGER NOT NULL DEFAULT 0,
|
||||
"type" INTEGER NOT NULL,
|
||||
@@ -135,10 +136,10 @@ CREATE INDEX "sys_role_permission_role_id_idx" ON "sys_role_permission"("role_id
|
||||
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");
|
||||
CREATE UNIQUE INDEX "sys_resource_path_key" ON "sys_resource"("path");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "sys_resource_path_key" ON "sys_resource"("path");
|
||||
CREATE UNIQUE INDEX "sys_resource_permission_key_key" ON "sys_resource"("permission_key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_resource_permission_resource_id_idx" ON "sys_resource_permission"("resource_id");
|
||||
@@ -109,7 +109,7 @@ model SysResource {
|
||||
updatedAt DateTime @updatedAt @map("updated_at") /// 修改时间
|
||||
name String /// 菜单名称或者接口名称
|
||||
path String? @unique() /// 菜单或api路径
|
||||
permission String? @unique() /// 权限字符
|
||||
permissionKey String? @unique() @map("permission_key") /// 权限字符
|
||||
parentId String? @map("parent_id")
|
||||
sort Int @default(0)
|
||||
type Int /// 资源类型 0:菜单 1:api
|
||||
|
||||
@@ -7,27 +7,30 @@ enum PermissionType {
|
||||
}
|
||||
|
||||
async function main() {
|
||||
await prisma.sysUser.upsert({
|
||||
where: { account: 'admin' },
|
||||
update: {},
|
||||
create: {
|
||||
name: '管理员',
|
||||
account: 'admin',
|
||||
password: '$2a$10$rWb52cHK1hrWuQQg3LiOJ.crDfIqjoOIoglGM96a.Ao1DL/dQwKCu',
|
||||
passwordSalt: '$2a$10$rWb52cHK1hrWuQQg3LiOJ.',
|
||||
status: 1,
|
||||
},
|
||||
});
|
||||
const menus = [
|
||||
{ name: '用户管理', path: 'user', type: PermissionType.Menu },
|
||||
{ name: '角色管理', path: 'role', type: PermissionType.Menu },
|
||||
{ name: '菜单管理', path: 'menu', type: PermissionType.Menu },
|
||||
{ name: '系统配置', path: 'config', type: PermissionType.Menu },
|
||||
{ name: '资源管理', path: 'resource', type: PermissionType.Menu },
|
||||
];
|
||||
|
||||
for (const menu of menus) {
|
||||
// 创建菜单
|
||||
await prisma.$transaction(async (_prisma) => {
|
||||
await prisma.$transaction(async (_prisma) => {
|
||||
const user = await _prisma.sysUser.upsert({
|
||||
where: { account: 'admin' },
|
||||
update: {},
|
||||
create: {
|
||||
name: '管理员',
|
||||
account: 'admin',
|
||||
password:
|
||||
'$2a$10$rWb52cHK1hrWuQQg3LiOJ.crDfIqjoOIoglGM96a.Ao1DL/dQwKCu',
|
||||
passwordSalt: '$2a$10$rWb52cHK1hrWuQQg3LiOJ.',
|
||||
status: 1,
|
||||
gender: 0,
|
||||
},
|
||||
});
|
||||
|
||||
for (const menu of menus) {
|
||||
const { id: resourceId } = await _prisma.sysResource.create({
|
||||
data: menu,
|
||||
});
|
||||
@@ -39,8 +42,24 @@ async function main() {
|
||||
await _prisma.sysResourcePermission.create({
|
||||
data: { resourceId, permissionId },
|
||||
});
|
||||
}
|
||||
|
||||
// 创建角色并关联
|
||||
const role = await _prisma.sysRole.create({
|
||||
data: {
|
||||
name: '管理员',
|
||||
code: 'admin',
|
||||
status: 1,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
await _prisma.sysUserRole.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
roleId: role.id,
|
||||
},
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user