登录发现更多内容
首页
分类
发帖
账号
自动登录
找回密码
密码
登录
立即注册
立即登录
立即注册
其他登录
QQ
微信
首页
Portal
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
产品教程
BBS
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
开发资料
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
样品购买
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
IoT云平台
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
GitHub
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
技术博客
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
搜索
搜索
热搜:
LoRa
ESP8266
安信可
本版
帖子
用户
请
登录
后使用快捷导航
没有账号?
立即注册
每日签到
任务
广播
导读
排行榜
设置
我的收藏
退出
2
0
0
首页
爱星物联IoT云平台
›
爱星物联多租户介绍
返回列表
爱星物联多租户介绍
[ 复制链接 ]
发布帖子
Hogan
管理员
29
主题
32
回帖
1481
积分
管理员
积分
1481
私信
2人留言
楼主
爱星物联IoT云平台
1103
2
2024-9-13 08:50:16
爱星物联的租户对应就是我们开发者所属的企业,每个开发者可以拥有一个主租户和加入多个租户,可在开放平台顶部下拉切换  如果想要将成员添加到你的租户,你可以进入授权管理进行添加,但是这里需要注意的是,目前只能添加已注册的用户;  爱星物联租户隔离的方式为共用数据库,通过租户ID(tenant\_id)字段隔离的方法,租户Id隔离了产品、固件、设备、App和面板等可由开发者配置的数据;  平台API登录之后,会将租户Id存储到Token中, 后端接口通过解析Token获取租户Id过滤数据; 这里我们可以看看iot\_cloud\_api\_service服务源码的auth.go文件;  平台为了统一获取方法租户Id,封装了相关函数 接口逻辑代码中可调用controls.GetTenantId(c)函数租户Id,通过参数传递给微服务; ``` func GetTenantId(c *gin.Context) string { return c.GetString("tenantId") } tenantId := controls.GetTenantId(c) ``` 或者直接使用controls.WithUserContext(c)通过上下文传递给微服务中; ``` //上下文传参 func WithUserContext(c *gin.Context) context.Context { ctx := metadata.NewContext(context.Background(), map[string]string{ "userId": iotutil.ToString(c.GetInt64("userId")), "tenantId": c.GetString("tenantId"), "lang": c.GetHeader("lang"), "token": GetToken(c), }) return ctx } ctx := controls.WithOpenUserContext(c) resp, err := rpc.ClientOemAppService.FindById(ctx, &protosService.OemAppFilter{ Id: obj.AppId, }) //上下文接收参数 //但是这里需要注意的就是tenantid的大小写的问题, 传入的时候是tenantId,但是接收的是tenantid, 这是框架进行转换了; import "go-micro.dev/v4/metadata" func GetTenantId(ctx context.Context) (string, error) { tenantId, _ := metadata.Get(ctx, "tenantid") if tenantId == "" { return "", errors.New("tenantId not found") } return tenantId, nil } ``` 而APP则是在构建成功之后会将租户Id写入到APP安装中, 登录之后将把租户缓存起来,并在调用接口的时候放入Header传给接口过滤 ``` //在AppApi中通用也分装获取的租户的方法, 但是区别是从Header中获取, 应为APP在构建之后就已经确认APP的归属租户了; func GetTenantId(c *gin.Context) string { tenantId := c.GetHeader("tenantId") return tenantId } ```
点赞
0
收藏
0
淘帖
0
────
0
人觉得很赞
────
回复
使用道具
举报
2 回复
电梯直达
正序浏览
倒序浏览
正序浏览
沙发
WT_0213
回复
使用道具
举报
2024-9-13 11:57:58
回复
评论
使用道具
举报
板凳
iiv
回复
使用道具
举报
2024-9-13 20:31:35
不知道说啥了,已经学不过来了,只能666了
回复
评论
使用道具
举报
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
立即登录
手机登录
点评
高级模式
本版积分规则
回帖并转播
回帖后跳转到最后一页
返回
今日推荐
基于 Ai-WV01-32S+STM32移植 emMCP 实现 AI 语音控制点灯
AiPi-PalChatV1_“湾湾小何”提示音测试固件V2.9_UART-MCP
[WB2] 实现自动发现局域网下的设备
热帖排行
基于 Ai-WV01-32S+STM32移植 emMCP 实现 AI 语音控制点灯
求助各位大佬PB-03F的断连问题
求助各位大佬PB-03F的断连问题
ra-01sc-p发射功率大小的使用问题
[AiPi-PalchatV1] [Windows] 克隆仓库和在线烧录遇到的一些小问
AT+MQTTPUBRAW指令所支持的最大数据传输量是多少
AiPi-PalChatV1_UART-MCP_v2.8 UART-MCP 协议配置 问题
Ai-WB2蓝牙怎么连接打印机
统计信息
会员数: 30486 个
话题数: 44654 篇
首页
分类
我的