Spiff-Arena项目中嵌入式Superset仪表板的实现方案

Spiff-Arena项目中嵌入式Superset仪表板的实现方案

背景介绍

在Spiff-Arena工作流管理系统中,用户提出了一个需求:需要在Spiff的手动任务中嵌入Superset仪表板,并实现按用户和时间范围进行预过滤的功能。具体来说,当用户在Spiff中启动流程实例时,应该只能看到与自己相关的费用条目,并且可以按选定时间段进行筛选。

技术实现方案

初始方案探索

项目团队最初尝试通过iframe方式嵌入Superset仪表板,并计划通过URL参数传递过滤条件。这个方案的核心思路是:

  1. 在Spiff流程中创建三个关键变量:

    • filter_1:用户邮箱
    • filter_2:开始日期
    • filter_3:结束日期
  2. 将这些变量作为查询参数附加到iframe的URL中

安全性考量

在技术验证过程中,团队发现了一个重要的安全隐患:如果仅通过URL参数传递过滤条件,用户可以通过检查代码修改过滤值来查看其他用户的费用数据。这显然不符合业务需求中"每个核心贡献者只能查看自己的费用"这一关键要求。

改进方案设计

为了解决安全问题,团队采用了组合方案:

  1. 行级安全规则:在Superset端设置规则,确保用户只能看到requestor_work_email与自己Superset登录邮箱匹配的记录

  2. 日期范围过滤:仍然通过URL参数传递开始日期和结束日期,格式为"月-日-年"

  3. 专用仪表板:为嵌入式场景创建专门的仪表板(62号),使用特定的数据集配置

技术实现细节

Superset端配置

  1. 创建了专用的嵌入式仪表板,其数据集能够接收两个输入参数:

    • start_date
    • end_date
  2. 配置行级安全规则,确保数据按当前用户邮箱自动过滤

  3. 日期格式处理为"MM-DD-YYYY"格式

Spiff流程端配置

  1. 流程模型生成正确的URL格式:

    https://superset.bi.status.im/superset/dashboard/62/?start_date=06-10-2024&end_date=06-11-2024
    
  2. 确保日期参数正确传递且不为空

遇到的问题及解决方案

  1. 日期格式问题:初期尝试使用不同日期格式导致过滤失败,最终确定使用"MM-DD-YYYY"格式

  2. 仪表板访问错误:发现必须传递有效的start_date和end_date参数,否则仪表板会报错

  3. 权限控制混淆:初期混淆了普通仪表板和专用嵌入式仪表板,导致过滤规则不生效

最佳实践建议

  1. 对于敏感数据展示,务必结合服务端行级安全规则,不能仅依赖客户端参数

  2. 为嵌入式场景创建专用仪表板,与常规分析场景隔离

  3. 参数传递要确保格式一致性,特别是日期这类容易混淆的参数

  4. 实施前充分测试各种边界情况,包括参数缺失、格式错误等场景

总结

通过组合Superset的行级安全规则和URL参数过滤,Spiff-Arena项目成功实现了嵌入式仪表板的安全访问控制。这一方案既满足了业务需求中的数据隔离要求,又提供了灵活的时间范围筛选功能,为类似场景提供了可复用的技术方案。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值