第4章 页面级权限控制的原型实现:动态面板切换显示/隐藏、条件判断结合角色变量
1. 用户场景
某企业内部管理系统分为「管理员」与「普通用户」两种角色。管理员登录后可见「用户管理」「系统配置」「审计日志」三个模块;普通用户登录后仅可见「任务看板」「个人中心」,且「任务看板」中的「删除任务」按钮对普通用户隐藏。产品经理需要在 Axure 中构建可交互的原型,用于验证页面级权限控制的逻辑正确性与体验完整性。
典型用户故事:“作为管理员,我希望登录后能看到所有管理功能;作为普通用户,我希望只能看到与我工作相关的模块,避免界面信息过载。”
2. 业务问题
- 权限粒度粗放:同一页面内不同功能区域对不同角色可见性不同,静态页面无法表达这种差异。
- 交互反馈缺失:角色切换后页面区域不能自动更新,导致演示时需手动解释“这里管理员才看得到”。
- 条件逻辑复杂:多个功能模块的显示/隐藏依赖同一个角色变量,但彼此之间互有嵌套关系,容易产生逻辑冲突。
3. 需求拆解
| 需求编号 | 需求描述 | 涉及角色 | 优先级 |
|---|---|---|---|
| PR-04-01 | 页面顶部导航栏根据角色显示/隐藏「系统管理」入口 | 管理员 / 普通用户 | P0 |
| PR-04-02 | 「任务看板」页面中的「删除任务」按钮仅对管理员可见 | 管理员 / 普通用户 | P0 |
| PR-04-03 | 「审计日志」整页区域只对管理员开放,普通用户访问时显示“无权限”提示 | 管理员 / 普通用户 | P1 |
| PR-04-04 | 角色变量在原型启动时通过全局变量初始化,支持演示中手动切换角色 | 管理员 / 普通用户 | P0 |
4. 方案表达
使用 Axure 的 动态面板(Dynamic Panel)作为页面级权限控制的核心载体。每个需要权限控制的功能区域独立封装为一个动态面板,面板内包含两个状态:「可见状态」与「隐藏/无权限状态」。通过 全局角色变量(userRole)结合 条件判断(Case)控制面板状态的切换。
4.1 动态面板状态定义
| 动态面板名称 | 状态 A(管理员可见) | 状态 B(普通用户可见) | 默认状态 |
|---|---|---|---|
| nav_system | 显示「系统管理」导航项 | 隐藏该导航项(占位留空) | A |
| btn_deleteTask | 显示「删除任务」按钮 | 隐藏按钮(或置灰不可点击) | B |
| page_auditLog | 显示审计日志完整内容 | 显示“您无权限访问此模块”提示 | B |
4.2 条件判断规则配置
在 Axure 的「交互」面板中,为每个动态面板添加 页面加载时(OnPageLoad) 用例,配置条件判断逻辑。规则示例如下:
用例名称:初始化角色面板
条件:If 全局变量 [[userRole]] 等于 "admin"
动作:设置动态面板 nav_system 为状态 A(可见)
设置动态面板 btn_deleteTask 为状态 A(可见)
设置动态面板 page_auditLog 为状态 A(可见)
否则(Else):
动作:设置动态面板 nav_system 为状态 B(隐藏)
设置动态面板 btn_deleteTask 为状态 B(隐藏)
设置动态面板 page_auditLog 为状态 B(无权限提示)
关键交互逻辑:所有面板状态切换集中在一个 OnPageLoad 用例中管理,避免分散维护导致逻辑不一致。角色切换演示时,通过按钮修改全局变量 userRole 并重新加载页面,即可触发全部面板刷新。
4.3 方案流程图
下图展示了从角色变量读取到动态面板状态切换的完整决策链路:
5. 指标验证
- 面板切换响应正确率:在角色变量变更后,所有受控动态面板在 1 次页面刷新内全部切换到正确状态,正确率应达到 100%。
- 条件判断覆盖度:覆盖 admin 和 user 两种角色,每种角色至少验证 3 个动态面板的状态是否符合预期。
- 无状态冲突:不存在同一个动态面板同时被多个条件分支设置为不同状态的情况。
6. 验收标准
| 验收项 | 验收方法 | 预期结果 |
|---|---|---|
| 管理员角色面板状态 | 设置 userRole = "admin",刷新页面 | 导航显示「系统管理」;任务看板显示「删除任务」按钮;审计日志显示完整内容 |
| 普通用户角色面板状态 | 设置 userRole = "user",刷新页面 | 导航隐藏「系统管理」;任务看板隐藏「删除任务」按钮;审计日志显示“无权限”提示 |
| 角色切换后状态刷新 | 从 admin 切换到 user,刷新页面 | 所有面板从 A 状态切换为 B 状态,无残留 |
| 条件判断无冲突 | 审查所有 OnPageLoad 用例 | 每个动态面板在同一个用例中只被设置一次状态 |
7. 交付物模板
本章交付的原型文件应包含以下结构:
| 文件/组件 | 说明 | 类型 |
|---|---|---|
| 全局变量 userRole | 字符串类型,默认值为 "admin",用于存储当前演示角色 | 变量配置 |
| 动态面板 nav_system | 2 个状态:状态 A(显示导航项)/ 状态 B(隐藏) | 动态面板 |
| 动态面板 btn_deleteTask | 2 个状态:状态 A(显示按钮)/ 状态 B(隐藏按钮) | 动态面板 |
| 动态面板 page_auditLog | 2 个状态:状态 A(完整内容)/ 状态 B(无权限提示) | 动态面板 |
| OnPageLoad 用例 | 包含 if-else 条件判断,集中管理所有面板状态切换 | 交互用例 |
| 角色切换演示按钮 | 2 个按钮:点击后修改全局变量并触发页面刷新,用于演示角色切换 | 交互元件 |
常见避坑提示:动态面板的默认状态必须与初始角色变量一致(建议默认设为 admin 对应的状态 A),否则原型加载时会出现短暂的状态闪烁。另外,条件判断中务必使用“等于”而非“包含”,避免变量值部分匹配导致逻辑错误。