Files
1Panel/frontend/src/utils/auth-response.ts
T
ssongliuandCityFun d57c998047 fix: serve frontend routes with fallback (#12752)
* feat: change isProductPro logic (#12712)

* fix: tighten frontend RBAC permission guards (#12717)

* fix: tighten frontend RBAC permission guards

* feat: add permission directive coverage

* refactor frontend global store usage

* serve frontend routes with fallback

---------

Co-authored-by: CityFun <31820853+zhengkunwang223@users.noreply.github.com>
2026-05-21 12:39:49 +08:00

67 lines
2.1 KiB
Go

import { ResultEnum } from '@/enums/http-enum';
import i18n from '@/lang';
import router from '@/routers';
import { useGlobalStore } from '@/composables/useGlobalStore';
import { MsgError } from '@/utils/message';
export type AuthResponseAction = 'reject' | 'return';
export interface AuthResponseResult {
handled: boolean;
action?: AuthResponseAction;
message: string;
}
interface AuthResponseOptions {
showRBACMessage?: boolean;
}
const forbiddenMessage = () => i18n.global.t('commons.res.forbidden');
export const redirectToEntrance = () => {
const { entrance, isLogin } = useGlobalStore();
isLogin.value = false;
router.push({
name: 'entrance',
params: { code: entrance.value },
});
};
export const redirectToExpired = () => {
router.push({ name: 'Expired' });
};
export const handleAuthResponseCode = (data: any, options: AuthResponseOptions = {}): AuthResponseResult => {
const message = data?.message || forbiddenMessage();
switch (data?.code) {
case ResultEnum.OVERDUE:
case ResultEnum.FORBIDDEN:
redirectToEntrance();
return { handled: true, action: 'reject', message };
case ResultEnum.ERR_RBAC:
if (options.showRBACMessage) {
MsgError(message);
}
return { handled: true, action: 'reject', message };
case ResultEnum.EXPIRED:
redirectToExpired();
return { handled: true, action: 'return', message };
default:
return { handled: false, message: '' };
}
};
export const handleAuthResponseStatus = (status: number): AuthResponseResult => {
switch (status) {
case ResultEnum.OVERDUE:
case ResultEnum.FORBIDDEN:
redirectToEntrance();
return { handled: true, action: 'reject', message: forbiddenMessage() };
case ResultEnum.EXPIRED:
redirectToExpired();
return { handled: true, action: 'return', message: forbiddenMessage() };
default:
return { handled: false, message: '' };
}
};