系统 SHALL 通过 sys_role、sys_role_menu 等模型维护角色与菜单的关联;角色管理界面 SHALL 支持为角色配置可访问菜单树,且勾选子菜单时 SHALL 自动包含必要父菜单(与《中科兴皖需求 V0.3》§2.1.5 描述一致)。
角色 SHALL 具有 data_scope 字段,取值语义为:全部、本部门、本部门及以下、仅本人、自定义等(与需求 §2.1.5 及表注释一致);当为自定义时,系统 SHALL 使用 sys_role_data_scope_detail 维护 scope_type(部门/用户)与 scope_value。
sys_role_data_scope_detail,且运行时查询 SHALL 按明细过滤单个用户允许绑定多个角色;其菜单权限与数据权限 SHALL 分别取所有的角色的权限并集(与需求 §2.1.5「特别注意」一致)。
用户有效角色 SHALL 为:直接绑定角色 ∪ 经启用职位(sys_user_post → sys_post → sys_post_role)继承的启用角色(与需求 §2.1.8 一致)。停用职位、停用角色或已软删关联 SHALL NOT 参与并集。
data_scope 参与并集;登录门禁 SHALL 视该用户为已有有效角色系统 SHALL 通过 sys_post_role 维护职位与角色关联;职位管理界面 SHALL 支持为职位配置关联角色;用户管理界面 SHALL 支持为用户多选职位。职位本身 SHALL NOT 直接配置菜单树或独立 data_scope(权限仍落在 sys_role)。
用户详情接口 SHALL 区分:roleIds(直接绑定)、postInheritedRoleIds(职位继承)、effectiveRoleIds / effectiveRoleNames(有效并集)。用户管理新增/编辑界面 SHALL NOT 提供直接绑角色的写入控件;直接绑定由运维接口/脚本或专用授权模块维护。更新用户时若仅提交职位关联,SHALL NOT 清空该用户的直接角色绑定。
sys_post_role 关联替换为该列表(软删除旧关联)postIds、未包含 roleIdssys_user_post,SHALL NOT 修改 sys_user_role菜单管理 SHALL 同时支撑 Web 端与小程序端菜单;系统 SHALL 预置两棵顶层虚拟根(需求中的 parent_id=0 的「web 端菜单」「移动端菜单」),后续菜单 SHALL 挂载其下(与需求 §2.1.6)。
visible/status 字段符合规范枚举租户管理 SHALL 仅对超级系统管理员开放(与需求 §2.1.1);其他系统管理 SHALL 在租户上下文中执行,与 api-conventions 中租户隔离一致。