[草稿] 认证、菜单与权限
Nebula 前端 Shell 已经把认证、菜单和权限的主链路串好了。理解这条链路后,业务页面通常只需要关心“我要展示什么”,不需要重复处理“我有没有资格展示”。
登录态是怎么工作的
apps/shell/src/app.tsx 里已经实现了完整的会话启动和刷新逻辑:
- 应用启动后先从本地恢复会话
- 如果已有 token 且满足刷新条件,就自动调用刷新接口
- 登录成功后预加载菜单、字典、通知等 Shell 运行数据
- token 即将过期时自动续期,失败则清空会话并跳转
/login
对业务模块来说,这意味着你不应该再自己维护一套 token 生命周期。
菜单是怎么变成页面的
前端路由不是写死在单个文件里的,而是由两部分共同组成:
- 后端返回的菜单数据
- 已注册业务模块声明的路由元数据
packages/core 会把菜单和模块注册信息组合成最终可用路由,因此:
- 后端菜单决定页面是否出现在导航中
- 业务模块的
PlatformModule决定某个路径该加载哪个组件
这也是为什么菜单和前端组件 key 要保持一致。
权限怎么判断
权限能力已经封装在 @platform/core 中:
usePermission(code):返回布尔结果NePermission:做声明式渲染保护auth.hasPermission(code):从AppContext访问权限判断
推荐方式是:
- 页面级或按钮级显示控制优先使用
NePermission - 需要在逻辑中判断时再用
usePermission
前后端协作时要约定什么
最关键的是三类约定:
- 登录和刷新接口返回的会话结构要稳定
- 菜单树里的路径、组件标识、可见性字段要与前端注册信息对齐
- 按钮权限码要在前端页面里以统一 code 使用
一旦这三类约定稳定下来,前端页面就能随着后端菜单和权限配置动态变化,而不需要频繁改路由骨架。