V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GrapeCityChina
V2EX  ›  推广

BI 与 SaaS 碰撞,让数据处理更加轻松(下)

  •  
  •   GrapeCityChina · 2022-06-17 15:49:36 +08:00 · 561 次点击
    这是一个创建于 672 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    在上篇内容中,我们从 SaaS 各种功能的角度为大家介绍了在数据处理中 SaaS 的巨大价值,而本次我们将用实例将为大家展示 SaaS 与 BI 间的碰撞又会产生怎样的火花。

    BI 与 SaaS 集成示例

    通常 BI 分析工具都提供了对于数据库的丰富接口,用以更加快捷高效地处理数据。此处我们以一具体工具实例作为演示内容,它提供基于 GraphQL 的丰富的 API 接口,可以通过 API 和动态参数来根据用户上下文信息获取相应的数据和生成文档。具体嵌入方式可以根据 SaaS 系统情况进行合理调整。

    1 、创建数据源

    对于多租户的场合,通常会基于用户进行分库处理,这种情况可以通过用户上下文信息,创建动态数据源:

    1.1 添加扩展参数,增加用户上下文的数据库信息

    1.2 创建用户时,绑定上该用户的数据库信息

    1.3 创建数据源时,使用动态参数配置

    2 、创建角色和用户 (使用内置用户)

    2.1 创建角色名:

    POST /api/graphql?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8a
    Content-Type: application/json
    
    {"query":"mutation { addRole( roleName: \"2\" ) { name } }"}
    
    

    2.2 POST 提交:

    POST /admin/api/accountmanagement/api/v1/roles?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8a
    Content-Type: application/json
    
    {"Name":"2"}
    
    

    2.3 为角色分配权限:

    POST
    /admin/api/accountmanagement/api/v1/roles/3f497dc1-66a6-45cb-a999-6c7f4b1bb15f/permissions?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8a
    Content-Type: application/json
    
    {"Permissions":["create-data-source","create-semantic-model","create-dataset","create-dashboard","view-dashboard","create-report","view-report","schedule-reports","create-input-form","view-revision","allow-sharing"]}
    

    2.4 创建用户,并分配角色

    POST /admin/api/accountmanagement/api/v1/users/?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8a
    Content-Type: application/json
    
    {"username":"2","email":"[email protected]","mobile":"","firstName":"","lastName":"","fullName":null,"password":"2","confirmPassword":"2","roles":["2"],"customizePropertyInfo":{"DBName":["Test"],"Password":["mAbQ5mlMDWck_xysj3rQ"],"Port":["3306"],"ServerIP":["192.168.32.100"],"Uid":["root"]}}
    
    

    3 、API 生成 Token

    生成 Token 的 API 接口,除此之外所有的 API 调用都需要 Token 参数才能正确访问

    POST /connect/token
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=password&username=admin&password=admin&client_id=integration&client_secret=eunGKas3Pqd6FMwx9eUpdS7xmz&access-token-lifetime=86400 
    

    * 注意申请 token 时应使用 access-token-lifetime 参数限制 token 的有效时长,单位为秒,长期无限制地使用永久 Token ,将可能由于 Token 堆积而影响登录性能 (永久 Token 可通过清理 wynis 数据库中 grants 表中的数据进行处理)

    4 、创建门户目录

    4.1 获取最大分类 ID

    POST /api/graphql?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8a
    Content-Type: application/json
    
    {"query":"query { tags (type: \"system\") { id, parentId, order, name, url, color, iconCssClass, isFavorites } }"}
    
    

    4.2 新建门户分类( order 等于第一步返回值的最大值+1 )

    var order = Math.max(...res.data.tags.map((item) => item.order)) + 1;
    POST
    /api/graphql?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8a
    Content-Type: application/json
    
    {"query":"mutation { addTag(name:\"2\", urlName:\"2\", order: 1961, iconCssClass: \"mdi mdi-folder\", grant: [ {role:\"Everyone\", ops:[Read]} ] , color: \"null\", parentId: \"null\" ) { id } }"}
    
    

    5 、复制文档并上传(可选)

    根据实际的业务场景,如果需要给每个用户增加 可单独编辑保存的 默认文档

    可以通过以下 2 种方式进行处理:

    1. 利用 Wyn Tools 或其他工具复制文档并按租户重命名
    2. 批量上传文档(手动上传)

    * 也可以通过角色权限分配的方式,将某个文档共享给某角色下的所有用户进行浏览

    6 、API 分类

    6.1 获取分类 ID

    POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
    Content-Type: application/json
    
    {"query":"query { tags { id, name}}"}
    

    6.2 获取文档 ID

    POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
    Content-Type: application/json
    
    {"query": "query { documenttypes(key:\"rdl\") { documents { id, title, type} } }"}
    
    

    6.3 给文档设置分类(请求参数的分类 id 和文档 id 来自前两步)

    POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
    Content-Type: application/json
    
    {"query":"mutation { tagDocument(tagId: \"eafd31d7-7aad-40b7-9206-f4866127a853\", documentId: \"f30ce97b-7369-424e-8b39-8ffa6b305838\") }"}
    
    

    7 、API 文档授权

    7.1 获取文档 ID

    POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
    Content-Type: application/json
    
    {"query": "query { documenttypes(key:\"rdl\") { documents { id, title, type} } }"}
    
    
    

    7.2 获取角色名称

    GET /admin/api/accountmanagement/api/v1/roles?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
    

    7.3 给文档分享角色权限

    (参数用到第一步返回的报表 ID ,以及第二步要分享的角色名称)

    POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
    Content-Type: application/json
    
    {"query":"mutation {\n\t\t\tupdatePermissions( documentId: \"f30ce97b-7369-424e-8b39-8ffa6b305838\" , grant: [ { role:\"1\", ops: [ Read, Update ]}]  )\n\t\t}"}
     
    
    

    如需通过带 Token 的 URL 进行集成,可继续参考以下步骤。

    8 、拼接 URL

    8.1 获取文档 ID

    POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
    Content-Type: application/json
    
    {"query": "query { documenttypes(key:\"rdl\") { documents { id, title, type} } }"}
    
    

    8.2 生成 Token (参考 3 生成 Token 的内容中 关于参数的定义)

    POST /connect/token?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=password&username=admin&password=admin&client_id=integration&client_secret=eunGKas3Pqd6FMwx9eUpdS7xmz&access-token-lifetime=86400
    
    
    

    8.3 拼接生成 URL

    http://localhost:51980/dashboards/view/ [报表 ID ] ?theme=default&lng=zh-CN&token= [ TOKEN ]

    9 、用户身份信息集成 (单点登录)

    对于 SaaS 平台通常都有独立的用户认证体系,而利用 BI 分析工具,我们可以直接实现用户信息集成,实现多个平台账户统一身份认证,统一管理,以下是关于单点登录的介绍:

    9.1 整体流程

    (图片来源于网络)

    9.2 自定义安全提供程序简介

    在 Wyn 提供的自定义安全提供程序接口中,我们需要根据调用时请求的 token ,完成相应的认证与授权逻辑,这个 token 根据业务需要,可以来源于一个统一的身份认证平台,或是由某个加密协议,将用户信息保存在 token 中实现权限的传递。

    而如何解析这个 token ,并实现用户的授权,就是需要在安全提供程序中实现的内容。

    9.3 自定义安全提供程序-用户校验

    当用户从画面上登录,或者通过前述的 connect/token api 调用获取登录 token 时,会使用 GenerateTokenAsync 方法,实现用户的校验

    而对于集成了自定义安全提供程序的 SaaS 平台,我们可以将当前使用者的 token 作为用户名和密码,发起登录请求:

    可以看到在 SaaS 平台中用户的 token 就传递到了 Wyn 的认证程序中,而这个 token 又是哪个角色,拥有哪些权限,可以通过向认证平台发起请求的方式获取。

    9.4 自定义安全提供程序-上下文授权

    上文中说明了如何实现用户的认证及登录,而对于 SaaS 平台,每个用户的上下文信息(数据库连接信息,角色等)就需要从统一身份认证的接口中提供,我们既可以将它在 token 中加密保存,也可以根据获取到的 token 动态从身份认证接口中获取:

    GetUserInfo 接口:

    登录成功:

    这样我们就可以通过在用户认证服务中集中配置,配合单点登录组件的认证逻辑,实现对各个租户的数据库及权限的统一管控。

    总结

    本文为大家详细介绍了 BI 与 SaaS 的碰撞,大家如果在操作过程中遇到什么问题可以在评论中提出。

    今后也会为大家带来更多有趣内容,如果想要了解更多 BI 相关知识内容,可以访问:

    https://gcdn.grapecity.com.cn/forum.php?mod=forumdisplay&fid=225&filter=typeid&typeid=273

    文字版链接:搜索葡萄城公开课

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   943 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:06 · PVG 04:06 · LAX 13:06 · JFK 16:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.