fix: 自动恢复失效令牌并保留身份入口
This commit is contained in:
@@ -24,7 +24,14 @@ export default function AgentNav({active,project,identity:provided}:{active:stri
|
||||
useEffect(()=>{
|
||||
setRoleHint(sessionStorage.getItem("xingbang-demo-role")||"");
|
||||
if(provided)return;
|
||||
fetch("/api/risk-agent/access/context",{headers:identityHeaders()}).then(async r=>r.ok?setLoaded(await r.json()):null).catch(()=>null);
|
||||
fetch("/api/risk-agent/access/context",{headers:identityHeaders()}).then(async response=>{
|
||||
if(response.ok){setLoaded(await response.json());return;}
|
||||
if(response.status===401&&sessionStorage.getItem("xingbang-access-token")&&!sessionStorage.getItem("xingbang-demo-role")){
|
||||
sessionStorage.removeItem("xingbang-access-token");
|
||||
sessionStorage.setItem("xingbang-demo-role","manager");
|
||||
location.reload();
|
||||
}
|
||||
}).catch(()=>null);
|
||||
},[provided]);
|
||||
const identity=provided||loaded;
|
||||
const role=identity?.role||roleHint;
|
||||
@@ -42,6 +49,6 @@ export default function AgentNav({active,project,identity:provided}:{active:stri
|
||||
{canConfigure&&<a href="/data-access" className={active==="risk"?"selected":""}><Settings2 size={16}/>配置治理</a>}
|
||||
<span className="xb-nav-spacer"/>
|
||||
{project&&<span className="xb-project-context">项目 · {project}</span>}
|
||||
{identity?<IdentitySelector identity={identity}/>:<span className="xb-identity"><i/><span>当前身份</span><b>待连接</b></span>}
|
||||
<IdentitySelector identity={identity||{role:roleHint}} pending={!identity}/>
|
||||
</nav>;
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@ import {ShieldCheck} from "lucide-react";
|
||||
|
||||
export const ROLE_LABEL:Record<string,string>={manager:"客户经理",reviewer:"评审员",admin:"配置管理员"};
|
||||
|
||||
export default function IdentitySelector({identity,dark=false}:{identity:any;dark?:boolean}){
|
||||
const role=identity?.role||"manager";
|
||||
export default function IdentitySelector({identity,dark=false,pending=false}:{identity:any;dark?:boolean;pending?:boolean}){
|
||||
const role=identity?.role||(pending?"":"manager");
|
||||
function switchRole(next:string){
|
||||
sessionStorage.removeItem("xingbang-access-token");
|
||||
sessionStorage.setItem("xingbang-demo-role",next);
|
||||
@@ -14,6 +14,7 @@ export default function IdentitySelector({identity,dark=false}:{identity:any;dar
|
||||
return <label className={`xb-role-switch role-${role}${dark?" dark":""}`}>
|
||||
<span>当前身份</span><ShieldCheck size={16}/>
|
||||
<select aria-label="切换演示身份" value={role} onChange={event=>switchRole(event.target.value)}>
|
||||
{pending&&<option value="" disabled>选择身份</option>}
|
||||
<option value="manager">客户经理</option><option value="reviewer">评审员</option><option value="admin">配置管理员</option>
|
||||
</select>
|
||||
</label>;
|
||||
|
||||
Reference in New Issue
Block a user