E5.18.3nav refresh after permission change设计

权限变化后导航结构需要即时更新而非缓存旧态

别名: 权限变更刷新导航 · stale nav cache

概念解释

角色被授予或收回之后,导航仍按打开应用时的那一份权限来画,就是在展示一份过期地图。权限变了导航要马上改(nav refresh after permission change),不能靠用户自己退出再进入来刷新。旧态缓存让刚开通的入口还不在,或已收回的入口还像能进。

机制

导航常被当成启动时算一次的壳:拉角色、滤项、然后钉在内存里直到下次冷启动。权限却是会话中会变的——管理员现场开通、试用到期、被移出项目。壳不重算,选择场和真实能力窗口错位。开通后用户按指引去找新项,地图上没有,会退回「是不是没开成功」。收回后旧项还在,点进去才失败,或更糟,客户端还展示可写操作直到服务端拒绝。固定项、命令面板的索引若也是启动时建的,会一起过期,近路指向一张已收走的门。

「即时」不一定是推送毫秒级,但必须在权限变更之后的下一次导航绘制之前完成。等用户碰巧下拉刷新或几天后重启,窗口期里地图都是错的。变更来自另一台设备或另一位管理员时,当前会话没有任何本地动作可当作刷新触发,更要有主动失效。

边界

纯离线客户端在连上之前无法获知变更,应标明导航可能过期,连上后立刻重拉,而不是用离线那一份继续假装权威。超大导航树每次重算很贵,可以按变更影响到的分支失效,而不是整树打掉;但被影响到的那几项必须在下一次绘制前更新。演示模式、模拟角色切换是主动要看另一张地图,应立即全量替换,并明显标出「当前是模拟」。

怎么落地

  • 权限变更事件(开通、到期、移出项目)要使当前会话的导航失效并重拉,不要等到下次冷启动。
  • 固定项和命令索引与导航同一时刻失效,避免近路还指着旧门。
  • 长时间前台停留也要能收到失效;仅在启动时拉一次不够。
  • 验证:在会话中给账号加一项权限,不退出,看导航是否出现该项。再收回,看是否消失或改为禁用。只在重启后才变,就是缓存旧态。从另一设备改权限,当前设备的下一次导航绘制也应跟上。

延伸

  • 同组E5.18.1 无权限项可以隐藏,也可以显示但禁用并提示原因 · E5.18.2 完全隐藏会让用户误以为功能不存在 · E5.18.4 权限判断应在服务端校验,导航隐藏不能替代授权
  • 相邻E5.16 快捷入口与固定项 · E5.17 导航项的徽标与提示
  • 站内检索stale navigation · permission change · session cache

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/E5.18.3