博观而约取,厚积而薄发。这篇文章主要讲述BI与SaaS碰撞,让数据处理更加轻松(下)相关的知识,希望能为你提供帮助。
背景在上篇内容中,我们从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":"mutationaddRole( 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":"123@123.com","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-urlencodedgrant_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":"querytags (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":"mutationaddTag(name:\\"2\\", urlName:\\"2\\", order: 1961, iconCssClass: \\"mdi mdi-folder\\", grant: [ role:\\"Everyone\\", ops:[Read] ] , color: \\"null\\", parentId: \\"null\\" )id"
文章图片
5、复制文档并上传(可选)根据实际的业务场景,如果需要给每个用户增加 可单独编辑保存的 默认文档
可以通过以下2种方式进行处理:
- 利用Wyn Tools或其他工具复制文档并按租户重命名
- 批量上传文档(手动上传)
文章图片
6、API分类6.1 获取分类ID
POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
Content-Type: application/json"query":"querytagsid, name"
文章图片
6.2获取文档ID
POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
Content-Type: application/json"query": "querydocumenttypes(key:\\"rdl\\")documentsid, title, type"
文章图片
6.3给文档设置分类(请求参数的分类id和文档id来自前两步)
POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
Content-Type: application/json"query":"mutationtagDocument(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": "querydocumenttypes(key:\\"rdl\\")documentsid, 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、拼接URL8.1 获取文档ID
POST /api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
Content-Type: application/json"query": "querydocumenttypes(key:\\"rdl\\")documentsid, title, type"
文章图片
8.2 生成Token (参考3 生成Token的内容中 关于参数的定义)
POST /connect/token?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7
Content-Type: application/x-www-form-urlencodedgrant_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 自定义安全提供程序简介
【BI与SaaS碰撞,让数据处理更加轻松(下)】在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
文字版链接:搜索葡萄城公开课
文章图片
推荐阅读
- 5种在TypeScript中使用的类型保护
- c# , .net 后端判断是否是移动端,是否是安卓设备,是否是微信,是否是支付宝,是否是QQ,是否是安卓系统,是否是苹果系统等
- Radius协议工作原理及双因素认证应用
- #夏日挑战赛#FFH分布式数据服务简单实现(OpenHarmony JS UI)
- OSPF学习-初级配置
- C++ 炼气期之变量的生命周期和作用域
- 基于STM32的手势识别检测
- Gitlab调用API更改用户权限属性
- 使用融云SDK在APICloud平台实现单人多人音频通话