merge: 集成V2.6 性能增强与小宝后台化

# Conflicts:
#	apps/server/prisma/schema.prisma
#	apps/server/src/app.module.ts
#	apps/web/components/layout/Sidebar.tsx
#	docs/architecture.md
#	docs/decisions.md
#	docs/roadmap.md
This commit is contained in:
2026-07-08 18:04:39 +08:00
60 changed files with 4933 additions and 46 deletions

View File

@@ -52,6 +52,14 @@ export const PERMISSION_GROUPS: PermissionGroup[] = [
{ action: 'manage', label: '管理', permission: 'xiaobao.warning:manage' },
],
},
{
module: 'ops',
moduleLabel: '运维看板',
category: 'main',
actions: [
{ action: 'view', label: '查看', permission: 'ops:view' },
],
},
{ module: 'member', moduleLabel: '成员', category: 'main', actions: std4('member') },
{ module: 'role', moduleLabel: '角色', category: 'main', actions: std4('role') },
{ module: 'audit', moduleLabel: '审计', category: 'main', actions: [{ action: 'view', label: '查看', permission: 'audit:view' }] },

View File

@@ -1,7 +1,7 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import type { RoleItem } from './members';
import { DEFAULT_ROLE_PERMISSIONS } from './permissions';
import { ALL_PERMISSIONS, DEFAULT_ROLE_PERMISSIONS } from './permissions';
import { mergePresetRolePermissions } from './role-permission-migration';
test('default group leader role has business permissions without admin modules', () => {
@@ -14,6 +14,13 @@ test('default group leader role has business permissions without admin modules',
assert.equal(permissions.some((p) => p.startsWith('role:')), false);
});
test('ops view permission is grantable but not part of non-admin preset roles', () => {
assert.ok(ALL_PERMISSIONS.includes('ops:view'));
assert.ok(DEFAULT_ROLE_PERMISSIONS['role-admin'].includes('*'));
assert.equal(DEFAULT_ROLE_PERMISSIONS['role-pm'].includes('ops:view'), false);
assert.equal(DEFAULT_ROLE_PERMISSIONS['role-lead'].includes('ops:view'), false);
});
test('mergePresetRolePermissions adds the built-in group leader role to old role data', () => {
const roles: RoleItem[] = [
{