R50 通知推送:dispatcher 投递服务、业务事件接入与员工推送开关
这个提交包含在:
@@ -32,6 +32,7 @@ type AuthContextValue = AuthState & {
|
||||
changePassword: (oldPassword: string, newPassword: string) => Promise<void>;
|
||||
logout: () => Promise<void>;
|
||||
bootstrapByRefresh: () => Promise<void>;
|
||||
refreshMe: () => Promise<void>;
|
||||
clearSession: () => void;
|
||||
offlineAccessMode: boolean;
|
||||
};
|
||||
@@ -248,6 +249,27 @@ export function AuthProvider({ children }: PropsWithChildren) {
|
||||
}
|
||||
}, [clearSession]);
|
||||
|
||||
const refreshMe = useCallback(async () => {
|
||||
let accessToken = tokenRef.current;
|
||||
if (!accessToken) {
|
||||
const refreshed = await refreshSession();
|
||||
accessToken = refreshed.accessToken;
|
||||
tokenRef.current = accessToken;
|
||||
}
|
||||
|
||||
const me = await fetchCurrentEmployee(accessToken);
|
||||
const permissions = resolvePermissionsForRoles(me.roleCodes ?? []);
|
||||
setOfflineAccessMode(false);
|
||||
writeOfflineAuthSnapshot(me, permissions);
|
||||
setState((previous) => ({
|
||||
...previous,
|
||||
accessToken,
|
||||
me,
|
||||
permissions,
|
||||
ready: true,
|
||||
}));
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
configureHttpAuth({
|
||||
getAccessToken: () => tokenRef.current,
|
||||
@@ -311,10 +333,11 @@ export function AuthProvider({ children }: PropsWithChildren) {
|
||||
changePassword,
|
||||
logout,
|
||||
bootstrapByRefresh,
|
||||
refreshMe,
|
||||
clearSession,
|
||||
offlineAccessMode,
|
||||
}),
|
||||
[bootstrapByRefresh, changePassword, clearSession, login, logout, offlineAccessMode, state],
|
||||
[bootstrapByRefresh, changePassword, clearSession, login, logout, offlineAccessMode, refreshMe, state],
|
||||
);
|
||||
|
||||
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;
|
||||
|
||||
在新工单中引用
屏蔽一个用户