应构建基于继承的权限类层级结构,以employeerole为抽象基类定义权限接口,具体角色按管理幅度分层继承,权限校验委托给策略类,通过组合支持多重身份,并预留组织变更钩子。

构建标准的企业员工权限管理类层级结构,核心是用面向对象的继承机制表达“角色-职责-权限”的天然层级关系,而不是简单堆砌字段或硬编码判断。关键在于让父类承载通用能力与约束,子类专注差异化逻辑,同时保持权限校验点统一、可扩展、易审计。
以岗位角色为基类,定义权限契约
创建抽象基类 EmployeeRole,不实例化,只声明所有角色必须实现的权限接口,比如:
- canAccessModule(String moduleName)
- canPerformAction(String actionKey)
- getEffectivePermissions()
该类可内置默认行为(如日志埋点、权限缓存键生成规则),但禁止写具体业务判断逻辑。所有具体角色(如 AdminRole、HRManagerRole、TeamLeadRole)都继承它,并重写上述方法。
按管理幅度分层建模,避免扁平化爆炸
权限层级应映射真实组织管理链,而非仅按职级高低。例如:
- DepartmentHeadRole 继承自 ManagerRole,增加跨团队审批权;
- ManagerRole 继承自 EmployeeRole,封装下属员工数据可见范围计算逻辑;
- InternRole 直接继承 EmployeeRole,但重写 canPerformAction 限制敏感操作。
这样,新增一个“项目总监”角色时,只需继承 DepartmentHeadRole 并叠加项目集维度权限,无需改动已有类。
权限判定委托给策略类,继承只管“谁有权限”,不管“怎么查”
在基类中定义权限检查入口,但将实际校验逻辑外移至独立的 PermissionStrategy 实现类。例如:
- RBACStrategy:基于角色-权限表查询;
- ABACStrategy:结合属性(时间、IP、数据标签)动态计算;
- HybridStrategy:先查角色再叠加上下文规则。
每个角色子类通过构造函数或 setter 注入对应策略,继承体系只负责传递请求,不耦合数据源细节。
支持运行时角色组合,用组合优于多继承
Java/C# 不支持多继承,但员工常具多重身份(如“技术经理+信息安全员”)。解决方案是:
- 所有角色类实现统一接口 RoleContract;
- 员工实体持有一个 List
- 权限检查时遍历列表,任一角色返回 true 即放行;
- 可选加权机制(如安全操作需 SecurityOfficerRole 显式授权,不接受其他角色覆盖)。
这种方式让继承专注单职责建模,组合解决现实复杂性。
不复杂但容易忽略的是:权限类必须和组织架构变更联动。建议在基类中预留 onOrgChange() 钩子方法,供子类响应部门调整、汇报线变更等事件,自动刷新缓存或触发审批流。










