部门管理全流程上线实施方案
部门管理全流程上线实施方案(管理后台 + 公司后台)
目标:上线“部门增删改查、人员归属、负责人、角色继承、审计日志”,并打通“添加公司员工时可选择部门”。
1. 现状结论(基于当前代码)
- 已有 RBAC 底表(迁移SQL已存在):
- by_org_department
- by_org_role
- by_org_permission
- by_org_role_permission
- by_org_user_role
Merchant/CommonAction已能读取org_user_role -> org_role_permission -> org_permission。- 员工管理页(
Merchant/worker/create/edit)当前没有部门选择字段。 - 现有员工权限主要靠
shop_worker.is_xxx,与 RBAC 并行,尚未完全统一。
2. 你问的几个关键点(直接答)
2.1 部门在哪里添加?
建议两级入口:
- 公司后台(Merchant)主入口
菜单位置:公司管理 下新增 组织与权限
- 部门管理:merchant/orgdepartment/index
- 角色管理:merchant/orgrole/index
- 用户角色分配:merchant/orguserrole/index
- 权限审计日志:merchant/orgaudit/index
- 系统后台(Backstage)配置入口
仅维护“全局权限点字典”,不直接操作企业组织数据:
- 权限点管理:backstage/orgpermission/index
- 菜单/权限点映射维护
2.2 权限在哪里设置?
- 公司级权限:在 Merchant 后台给角色绑定
permission_code
- 数据落表:org_role_permission
- 人员权限:给用户绑定角色(可选部门)
- 数据落表:org_user_role
- 员工模块位权限(is_xxx):保留在员工编辑页(业务开关)
- 数据落表:shop_worker.is_xxx
建议:上线初期“双轨并行”,后续再收敛到统一策略(见第7章)。
2.3 添加公司员工时有没有部门选择?
现在没有。
上线后需要在以下页面新增:
themes/default/Merchant/worker/create.htmlthemes/default/Merchant/worker/edit.html
新增字段:
dept_id(单选,下拉)- 可选
role_id(默认“员工基础角色”)
提交时流程:
- 先写
shop_worker - 再写
org_user_role(shop_id + user_id + worker_id + dept_id + role_id)
3. 全流程设计(业务)
3.1 部门增删改查
- 新增:部门名称、编码、父部门、负责人
- 编辑:部门信息、负责人变更、排序
- 删除:仅允许无成员/无子部门时删(或做软删)
- 树结构:
parent_dept_id
3.2 人员归属
- 在“员工管理 -> 编辑”中选择部门
- 批量调整成员部门(组织页)
- 同步维护
org_user_role.dept_id
3.3 负责人
- 负责人字段:
org_department.dept_leader_user_id - 负责人候选来源:当前
shop_id下有效员工(shop_worker.status=1, closed=0)
3.4 角色继承(建议方案)
继承策略采用“父到子覆盖”:
- 默认:子部门继承父部门角色模板(只在“新成员加入时”自动带入)
- 角色分配优先级:
1. 用户直接角色(org_user_role.role_id)
2. 部门默认角色(新增 org_department_role 可选)
3. 店主默认 *
4. 审计日志(谁给了谁什么权限)
4.1 新增表建议
by_org_audit_log(建议新增)
idshop_idoperator_user_id(操作人)target_user_id(被操作用户)target_worker_idaction_type(ASSIGN_ROLE/REMOVE_ROLE/CHANGE_DEPT/CREATE_DEPT/DELETE_DEPT/UPDATE_ROLE_PERMS)before_jsonafter_jsonipcreate_time
4.2 记录时机
- 给用户分配/移除角色
- 调整部门归属
- 部门负责人变更
- 角色权限点变更
- 部门新增/删除/改名
4.3 展示位置
merchant/orgaudit/index(支持按人员、动作、日期筛选)
5. 代码落地清单(按模块)
5.1 控制器(新增)
Banyan/Lib/Action/Merchant/OrgdepartmentAction.class.phpBanyan/Lib/Action/Merchant/OrgroleAction.class.phpBanyan/Lib/Action/Merchant/OrguserroleAction.class.phpBanyan/Lib/Action/Merchant/OrgauditAction.class.php
5.2 模板(新增)
themes/default/Merchant/orgdepartment/index.htmlthemes/default/Merchant/orgdepartment/create.htmlthemes/default/Merchant/orgdepartment/edit.htmlthemes/default/Merchant/orgrole/index.htmlthemes/default/Merchant/orguserrole/index.htmlthemes/default/Merchant/orgaudit/index.html
5.3 员工页改造(现有页)
themes/default/Merchant/worker/create.html:加部门选择themes/default/Merchant/worker/edit.html:加部门选择Banyan/Lib/Action/Merchant/WorkerAction.class.php:
- create/edit 后维护 org_user_role
- 删除员工时处理角色关系(软删/解绑)
5.4 菜单入口(现有页)
themes/default/Merchant/index/index.html
- 在“公司管理”分组下新增“组织与权限”入口
6. 数据一致性规则(必须)
- 同一
shop_id下,org_user_role允许多角色,但需有is_primary主角色 - 员工离职/禁用后:
- shop_worker.closed=1 或 status!=1
- 同步停用其 org_user_role
- 部门删除前必须检查:
- 无有效成员
- 无子部门
7. 与现有 is_xxx 权限位的关系
上线建议(避免一次性重构风险):
- 第一阶段:
- 保留 shop_worker.is_xxx(业务模块开关)
- 新增 RBAC 动作权限(接口/按钮)
- 第二阶段:
- 在关键模块逐步由 is_xxx 迁移到 permission_code
- 最终 is_xxx 仅作为兼容字段或废弃
8. 上线顺序建议
- 先上部门/角色/分配 + 审计日志(不改老权限)
- 再改员工新增/编辑:加入部门选择并写
org_user_role - 最后改项目、招采、企业信息采集等关键模块,接入 RBAC 强校验
9. 验收清单(可直接测试)
- [ ] 可新增/编辑/删除部门(含层级)
- [ ] 可设置部门负责人
- [ ] 员工新增时可选部门,编辑可改部门
- [ ] 可给员工分配角色并立即生效
- [ ] 角色权限修改后,菜单与动作权限变化正确
- [ ] 每次权限/部门变更均有审计日志,能追溯“谁改了谁”
