fix(账号): 固化超级管理员身份
This commit is contained in:
@@ -2,6 +2,13 @@
|
||||
import { create } from 'zustand';
|
||||
import type { Department, Member, RoleItem, PasswordRule } from '@/lib/members';
|
||||
import { DEFAULT_PASSWORD_RULE, generatePassword } from '@/lib/members';
|
||||
import {
|
||||
SYSTEM_ADMIN_MEMBER,
|
||||
SYSTEM_ADMIN_ROLE_ID,
|
||||
canDeleteSystemMember,
|
||||
ensureSystemAdminMember,
|
||||
sanitizeSystemAdminPatch,
|
||||
} from '@/lib/member-system';
|
||||
import { DEFAULT_ROLE_PERMISSIONS } from '@/lib/permissions';
|
||||
import { loadServerData, saveServerData } from '@/lib/server-data';
|
||||
|
||||
@@ -24,7 +31,7 @@ const PRESET_ROLES: RoleItem[] = [
|
||||
];
|
||||
|
||||
const MOCK_MEMBERS: Member[] = [
|
||||
{ id: 'm-8', name: '超级管理员', departmentId: 'dept-1', roleId: 'role-admin', phone: '13200132008', email: 'chenshi@company.com', password: 'Ftb@2024', createdAt: '2024-01-01' },
|
||||
SYSTEM_ADMIN_MEMBER,
|
||||
];
|
||||
|
||||
interface MemberState {
|
||||
@@ -74,7 +81,22 @@ export const useMemberStore = create<MemberState>((set, get) => ({
|
||||
}
|
||||
return r;
|
||||
});
|
||||
set({ departments: cached.departments, members: cached.members, roles: migratedRoles, passwordRule: cached.passwordRule || DEFAULT_PASSWORD_RULE });
|
||||
const adminRole = PRESET_ROLES.find((r) => r.id === SYSTEM_ADMIN_ROLE_ID)!;
|
||||
const roles = migratedRoles.some((r) => r.id === SYSTEM_ADMIN_ROLE_ID)
|
||||
? migratedRoles.map((r) => r.id === SYSTEM_ADMIN_ROLE_ID ? { ...adminRole, ...r, isSystem: true, permissions: DEFAULT_ROLE_PERMISSIONS[SYSTEM_ADMIN_ROLE_ID] } : r)
|
||||
: [adminRole, ...migratedRoles];
|
||||
const rolesChanged =
|
||||
roles.length !== migratedRoles.length ||
|
||||
roles.some((role, index) => JSON.stringify(role) !== JSON.stringify(migratedRoles[index]));
|
||||
const ensured = ensureSystemAdminMember(cached.members);
|
||||
const next = {
|
||||
departments: cached.departments,
|
||||
members: ensured.members,
|
||||
roles,
|
||||
passwordRule: cached.passwordRule || DEFAULT_PASSWORD_RULE,
|
||||
};
|
||||
set(next);
|
||||
if (ensured.changed || rolesChanged) saveStored(next);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -107,11 +129,14 @@ export const useMemberStore = create<MemberState>((set, get) => ({
|
||||
saveStored({ departments: get().departments, members, roles: get().roles, passwordRule: get().passwordRule });
|
||||
},
|
||||
updateMember: (id, data) => {
|
||||
const members = get().members.map((m) => m.id === id ? { ...m, ...data } : m);
|
||||
set({ members });
|
||||
saveStored({ departments: get().departments, members, roles: get().roles, passwordRule: get().passwordRule });
|
||||
const safeData = sanitizeSystemAdminPatch(id, data);
|
||||
const updatedMembers = get().members.map((m) => m.id === id ? { ...m, ...safeData } : m);
|
||||
const ensured = ensureSystemAdminMember(updatedMembers);
|
||||
set({ members: ensured.members });
|
||||
saveStored({ departments: get().departments, members: ensured.members, roles: get().roles, passwordRule: get().passwordRule });
|
||||
},
|
||||
deleteMember: (id) => {
|
||||
if (!canDeleteSystemMember(id)) return;
|
||||
const members = get().members.filter((m) => m.id !== id);
|
||||
set({ members });
|
||||
saveStored({ departments: get().departments, members, roles: get().roles, passwordRule: get().passwordRule });
|
||||
@@ -142,6 +167,7 @@ export const useMemberStore = create<MemberState>((set, get) => ({
|
||||
saveStored({ departments: get().departments, members: get().members, roles, passwordRule: get().passwordRule });
|
||||
},
|
||||
deleteRole: (id) => {
|
||||
if (id === SYSTEM_ADMIN_ROLE_ID) return;
|
||||
const roles = get().roles.filter((r) => r.id !== id);
|
||||
set({ roles });
|
||||
saveStored({ departments: get().departments, members: get().members, roles, passwordRule: get().passwordRule });
|
||||
|
||||
Reference in New Issue
Block a user