refactor: 身份切换改为纯前端状态,不重新签发JWT

JWT始终包含所有身份的叠加能力(capabilities),权限判断基于所有能力。
移除/auth/select-identity接口,身份切换仅在前端状态中管理。
This commit is contained in:
Pine
2026-09-13 23:33:36 +08:00
parent 407a8fcda4
commit e3bed34a3a
2 changed files with 0 additions and 47 deletions
-43
View File
@@ -28,7 +28,6 @@ from ..schemas.auth import (
RevokeTokenRequest,
SendCodeRequest,
SendCodeResponse,
SelectIdentityRequest,
UpdateProfileRequest,
VerifyResponse,
WxLoginRequest,
@@ -353,48 +352,6 @@ async def login(req: LoginRequest, db: Database = Depends(get_db)):
return resp
@router.post("/select-identity", response_model=LoginResponse, summary="切换当前身份")
async def select_identity(
req: SelectIdentityRequest,
db: Database = Depends(get_db),
user: dict = Depends(get_current_user),
):
"""切换当前身份(运营方/园区管理员/企业管理员/个人),重新签发 JWT。
identity_id 格式:
- operator:平台运营方
- carrier:<park_id>:园区管理员
- enterprise:<company_id>:企业管理员
- opc_member:个人用户
"""
identities = await _compute_identities(db, user)
identity = next((i for i in identities if i["id"] == req.identity_id), None)
if identity is None:
raise HTTPException(status_code=400, detail="无效的身份 ID")
# 构建身份字典供 _issue_token 使用
identity_dict = {
"id": identity["id"],
"port": identity["port"],
"role": identity["role"],
"sub_role": identity.get("sub_role"),
"name": identity["name"],
"org_id": identity.get("org_id"),
"region_id": identity.get("region_id"),
}
token_record = await _issue_token(db, user, None, identity=identity_dict)
profile = await _profile_for(user, identity_dict, db)
resp = LoginResponse(
token=token_record["token"],
identities=identities,
**profile,
)
await _inject_mqtt_credentials(resp, user["id"])
return resp
@router.post("/register", response_model=LoginResponse, summary="注册")
async def register(req: RegisterRequest, request: Request, db: Database = Depends(get_db)):
"""注册唯一账户(演示端已存在 pine,故返回 403)。"""
-4
View File
@@ -47,10 +47,6 @@ class UpdateProfileRequest(BaseModel):
company: str | None = None
room: str | None = None
avatar: str | None = None
class SelectIdentityRequest(BaseModel):
"""切换当前身份(运营方/园区管理员/企业管理员/个人)。"""
identity_id: str
company_avatar: str | None = None
class RevokeTokenRequest(BaseModel):