Spiff-Arena项目中嵌入式Superset仪表板的实现方案
背景介绍
在Spiff-Arena工作流管理系统中,用户提出了一个需求:需要在Spiff的手动任务中嵌入Superset仪表板,并实现按用户和时间范围进行预过滤的功能。具体来说,当用户在Spiff中启动流程实例时,应该只能看到与自己相关的费用条目,并且可以按选定时间段进行筛选。
技术实现方案
初始方案探索
项目团队最初尝试通过iframe方式嵌入Superset仪表板,并计划通过URL参数传递过滤条件。这个方案的核心思路是:
-
在Spiff流程中创建三个关键变量:
- filter_1:用户邮箱
- filter_2:开始日期
- filter_3:结束日期
-
将这些变量作为查询参数附加到iframe的URL中
安全性考量
在技术验证过程中,团队发现了一个重要的安全隐患:如果仅通过URL参数传递过滤条件,用户可以通过检查代码修改过滤值来查看其他用户的费用数据。这显然不符合业务需求中"每个核心贡献者只能查看自己的费用"这一关键要求。
改进方案设计
为了解决安全问题,团队采用了组合方案:
-
行级安全规则:在Superset端设置规则,确保用户只能看到requestor_work_email与自己Superset登录邮箱匹配的记录
-
日期范围过滤:仍然通过URL参数传递开始日期和结束日期,格式为"月-日-年"
-
专用仪表板:为嵌入式场景创建专门的仪表板(62号),使用特定的数据集配置
技术实现细节
Superset端配置
-
创建了专用的嵌入式仪表板,其数据集能够接收两个输入参数:
- start_date
- end_date
-
配置行级安全规则,确保数据按当前用户邮箱自动过滤
-
日期格式处理为"MM-DD-YYYY"格式
Spiff流程端配置
-
流程模型生成正确的URL格式:
https://superset.bi.status.im/superset/dashboard/62/?start_date=06-10-2024&end_date=06-11-2024 -
确保日期参数正确传递且不为空
遇到的问题及解决方案
-
日期格式问题:初期尝试使用不同日期格式导致过滤失败,最终确定使用"MM-DD-YYYY"格式
-
仪表板访问错误:发现必须传递有效的start_date和end_date参数,否则仪表板会报错
-
权限控制混淆:初期混淆了普通仪表板和专用嵌入式仪表板,导致过滤规则不生效
最佳实践建议
-
对于敏感数据展示,务必结合服务端行级安全规则,不能仅依赖客户端参数
-
为嵌入式场景创建专用仪表板,与常规分析场景隔离
-
参数传递要确保格式一致性,特别是日期这类容易混淆的参数
-
实施前充分测试各种边界情况,包括参数缺失、格式错误等场景
总结
通过组合Superset的行级安全规则和URL参数过滤,Spiff-Arena项目成功实现了嵌入式仪表板的安全访问控制。这一方案既满足了业务需求中的数据隔离要求,又提供了灵活的时间范围筛选功能,为类似场景提供了可复用的技术方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



