51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
import type { AuthProvider, UserIdentity } from 'react-admin';
|
|
|
|
import { clearStoredSession, readStoredSession } from '@/src/lib/session';
|
|
import type { AuthSession } from '@/src/lib/types';
|
|
|
|
export function hasAdminSession(session: AuthSession | null | undefined) {
|
|
return Boolean(session?.token?.trim());
|
|
}
|
|
|
|
export function buildAdminIdentity(session: AuthSession): UserIdentity {
|
|
return {
|
|
id: String(session.user.id),
|
|
fullName: session.user.username,
|
|
};
|
|
}
|
|
|
|
export const portalAdminAuthProvider: AuthProvider = {
|
|
login: async () => {
|
|
throw new Error('请先使用门户登录页完成登录');
|
|
},
|
|
logout: async () => {
|
|
clearStoredSession();
|
|
return '/login';
|
|
},
|
|
checkAuth: async () => {
|
|
if (!hasAdminSession(readStoredSession())) {
|
|
throw new Error('当前没有可用登录状态');
|
|
}
|
|
},
|
|
checkError: async (error) => {
|
|
const status = error?.status;
|
|
if (status === 401) {
|
|
clearStoredSession();
|
|
throw new Error('登录状态已失效');
|
|
}
|
|
|
|
if (status === 403) {
|
|
return;
|
|
}
|
|
},
|
|
getIdentity: async () => {
|
|
const session = readStoredSession();
|
|
if (!session) {
|
|
throw new Error('当前没有可用登录状态');
|
|
}
|
|
|
|
return buildAdminIdentity(session);
|
|
},
|
|
getPermissions: async () => [],
|
|
};
|