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":"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

文字版鏈接:搜索葡萄城公開課

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章