共计 5516 个字符,预计需要花费 14 分钟才能阅读完成。
背景
在上篇内容中,咱们从 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":"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-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 种形式进行解决:
- 利用 Wyn Tools 或其余工具复制文档并按租户重命名
- 批量上传文档(手动上传)
* 也能够通过角色权限调配的形式,将某个文档共享给某角色下的所有用户进行浏览
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
文字版链接:搜寻葡萄城公开课