背景在上一篇文章中,我们从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=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8aContent-Type:application/json{"query":"mutation{addRole(roleName:\"2\"){name}}"}2.2POST提交:POST/admin/api/accountmanagement/api/v1/roles?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c9265a843Contact/jsonlicationType:{"Name":"2"}2.3为角色acadminment/apacadminment/apacadminment/配/api/v1/roles/3f497dc1-66a6-45cb-a999-6c7f4b1bb15f/permissions?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8aContent-Type:application/data-sjson","Pcreateer-json"{"Pcreateer-json""“创建数据集”,“创建电子仪表板”,“查看仪表板”,“创建报告”,“查看-report","schedule-reports","create-input-form","view-revision","allow-sharing"]}2.4创建用户并分配角色POST/admin/api/accountmanagement/api/v1/users/?令牌=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965a8a内容类型:应用程序/json{“用户名”:“2”,“电子邮件”:“123@123.com”,“手机”:“”,“名字”,“姓氏”::“”"fullName":null,"password":"2","confirmPassword":"2","roles":["2"],"customizePropertyInfo":{"DBName":["Test"],"密码":["mAbQ5mlMDWck_xysj3rQ"],"Port":["3306"],"ServerIP":["192.168.32.100"],"Uid":["root"]}}3.API生成Token生成TokenAPI接口,除此之外,所有API调用都需要Token参数才能正确访问POST/connect/tokenContent-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可以通过清理wynis数据库grants表中的数据来处理)4.创建入口目录4.1获取最大类别IDPOST/api/graphql?token=8908645b0958662d66731038944c7d236d3d7c1ee98e3e2de3c5268453965aContentation{"query":"query{tags(type:\"system\"){id,parentId,order,name,url,color,iconCssClass,isFavorites}}"}4.2新建一个入口分类(order等于返回第一步的值maxvalue+1)varorder=Math.max(...res.data.tags.map((item)=>item.order))+1;/json{"query":"mutation{addTag(name:\"2\",urlName:\"2\",order:1961,iconCssClass:\"mdimdi-folder\",grant:[{role:\"Everyone\",ops:[Read]}],color:\"null\",parentId:\"null\"){id}}"}5.复制文档并上传(optional)根据实际业务场景,如果需要为每个用户单独添加一个可编辑保存的默认文档,可以通过以下两种方式处理:使用WynTools或其他工具复制文档并重命名分批上传文档(手动上传)*也可以通过角色权限分配,将某个文档共享给某个角色下的所有用户进行浏览6.API分类6.1获取分类IDPOST/api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7Content-Type:application/json{"query":"query{tags{id,name}}"}6.2GetdocumentIDPOST/api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7Content-Type:application/json{"query":"query{key)\types(documents{id,title,type}}}"}6.3设置分类对于文档(请求参数的分类id和文档id来自前两步)POST/api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7Content-Type:application/j:"mutation{tagDocument(tagId:\"eafd31-d40-7a9206-f4866127a853\",文件编号:\"f30ce97b-7369-424e-8b39-8ffa6b305838\")}"}7、API文档授权7.1获取文档IDPOST/api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7Content-Type:application/json{"query":"query{documenttypes(key:\"rdl\"){documents{id,title,type}}}"}7.2获取角色名GET/admin/api/accountmanagement/api/v1/roles?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c77.(参数使用报表第一步返回的ID和第二步要分享的角色名)POST/api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7Content-Type:application/json{"query":"mutation{\n\t\t\tupdatePermissions(documentId:\"f30ce97b-7369-424e-8b39-8ffa6b305838\",grant:[{role:\"1\",ops:[Read,Update]}])\n\t\t}"}如果你需要通过URL与Token集成,可以继续参考以下步骤8.拼接URL8.1获取文档IDPOST/api/graphql?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7Content-Type:application/json{"query":"query{documenttypes(key:\"rdl\"){id}}"}8.2(参考3生成Token的内容中关于参数的定义)POST/connect/token?token=77c9bfccf16659f2ab62cf7796b640156f13cea35bc30cde1597ddb4457720c7Content-Type:application/x-www-form-urlencodedgrant_type=password&username=admin&password=admin&client_id=integration&client_secret=eunGKas3Pqd6FMwx9eUpdS7xmz&access-token-lifetime=864008.3拼接生成URLhttp://localhost:51980/dashboards/view/【ReportID】?theme=default&lng=zh-CN&token=【TOKEN】9.SaaS平台的用户身份信息集成(单点登录)通常有独立的用户认证体系,利用BI分析工具,可以直接集成用户信息,实现统一身份认证和多平台账号统一管理,以下是单点登录介绍:9.1整体流程(图片来自网络)9.2自定义安全提供者介绍在Wyn提供的自定义安全提供者接口中,我们需要根据当时请求的token完成相应的认证授权逻辑打电话。这个token可以来源于一个统一的身份认证平台,或者一个加密协议,将用户信息存储在token中,用来传递权限。如何解析这个令牌并实现用户授权是安全提供者中需要实现的。9.3CustomSecurityProvider-用户验证当用户从屏幕登录,或通过上述connect/tokenapi调用获取登录令牌时,GenerateTokenAsync方法将用于实现用户验证。对于集成自定义安全提供者在SaaS平台上,我们可以使用当前用户的token作为用户名和密码发起登录请求:可以看到SaaS平台上用户的token是传递给Wyn认证的program,这个token是什么角色,向认证平台发起请求可以获得什么权限。9.4CustomSecurityProvider-ContextAuthorization上面介绍了如何实现用户认证和登录,但是对于SaaS平台来说,需要从统一身份认证的接口提供每个用户的上下文信息(数据库连接信息,角色等),既可以加密保存在token中,也可以根据获取到的token从身份认证接口动态获取:on组件的鉴权逻辑,实现了对各个租户的数据库和权限的统一管控。小结本文为您详细介绍了BI与SaaS的碰撞。如果您在操作过程中遇到任何问题,可以在评论中提出。未来,我们将为您带来更多有趣的内容。想了解更多BI的可以访问:https://gcdn.grapecity.com.cn/forum.php?mod=forumdisplay&fid=225&filter=typeid&typeid=273文字版链接:搜索葡萄城公开课
