OpenIDM用户状态为terminated时移除托管角色的实现方案咨询
OpenIDM用户状态变为terminated时自动移除关联角色的实现方案
ForgeRock OpenIDM 没有零配置直接可用的开箱即用功能覆盖这个需求,但平台内置的生命周期钩子、角色管理模块、预置离职流程已经提供了全部所需的基础能力,只需要少量配置即可实现,不需要从零开发自定义插件。
具体实现方法
方式一:适用于6.x及以上版本,通过对象更新触发规则实现
- 打开
conf/managed.json配置文件,定位到managed/user对象的triggers配置段,新增一个更新触发规则:当用户accountStatus字段从非terminated状态变更为terminated时,自动执行移除所有关联角色的操作。参考配置片段如下:
{ "name": "clearRolesWhenTerminated", "trigger": { "type": "onUpdate", "condition": "/object/accountStatus eq 'terminated' and /oldObject/accountStatus ne 'terminated'" }, "action": { "type": "javascript", "source": "openidm.delete('managed/user/' + object._id + '/roles', null, {})" } }- 打开
conf/sync.json,核对managed/user与managed/role之间的关联映射配置,确认deleteLink参数为开启状态,避免移除角色后残留无效关联链路,导致下游系统权限回收不彻底。默认安装的OpenIDM这个参数就是开启的,只需要确认没有被之前的自定义配置改动过即可。 - 配置保存后OpenIDM会自动热加载,不需要重启服务。可以创建测试账号绑定若干角色,手动将状态修改为terminated,验证角色关联是否被自动清空,同时查看审计日志确认操作留痕符合要求。
- 打开
方式二:适用于7.x及以上版本,直接启用预置离职流程
7.0之后的版本自带offboarding(用户离职)生命周期模板,你只需要在管理员控制台的「生命周期管理」菜单里找到离职流程配置,勾选流程中的「移除所有用户关联角色」节点,保存后即可生效,连自定义触发脚本都不需要编写,是最接近开箱即用的实现方式。
注意:如果你的环境里配置了角色的批量预缓存逻辑,建议在触发角色移除的逻辑后加一行刷新用户权限缓存的调用,避免权限缓存延迟导致短时间内已离职用户还能访问受保护资源。
内容的提问来源于stack exchange,提问作者sai kumar
相关产品推荐
相关产品推荐

