situ2001 / opensumi-core

🚀 A framework helps you quickly build Cloud or Desktop IDE products.
https://opensumi.com/zh
MIT License
0 stars 0 forks source link

[Stage2] Define user model #3

Closed situ2001 closed 2 years ago

situ2001 commented 2 years ago

本阶段为 https://github.com/opensumi/core/issues/1097 定义标准的用户模型

Date: from 08/01 to 08/12

Todo

situ2001 commented 2 years ago

阅读opensumi源代码,查看框架里是否已经有类似的“用户模型”(避免重复)

有,但不确定是否能用上。是下面这个,经过大致的分析,这应该是用来存储与管理第三方登录等验证信息(如GitHub OAuth)的,然后给模块和插件使用的。

https://github.com/situ2001/opensumi-core/blob/7f598a64f264300a1712a996f31be72039cc916e/packages/core-common/src/types/authentication.ts#L55

与协同编辑相关的模块可能会用到相关的用户信息(如remote-opener用到了clientId)。

我们也许可以直接使用这个service。思路:只要登录成功,我们就可以取到用户信息了,并保证用户是通过认证的。用户加入与退出协同,可以通过Browser侧的loginlogout方法来决定(协同模块监听AuthenticationSessionsChangeEvent)。但是这样的话,我们这个协同模块就会依赖于AuthenticationService了。

并且,能通过getSessions获取的信息,大致只有这些。

https://github.com/situ2001/opensumi-core/blob/7f598a64f264300a1712a996f31be72039cc916e/packages/core-common/src/types/authentication.ts#L19-L27

所以,我们要不要把与协同有关的用户模型(包含用户名,用户id以及将来会有的用户权限等其他信息)给独立定义出来呢??

Aaaaash commented 2 years ago

第三方

AuthenticationService 是兼容插件 API 的实现,本身只是为了实现第三方登录,协同有关的用户信息并不是第三方,而是由 IDE 集成方提供的

situ2001 commented 2 years ago

第三方

AuthenticationService 是兼容插件 API 的实现,本身只是为了实现第三方登录,协同有关的用户信息并不是第三方,而是由 IDE 集成方提供的

ok,对于这个用户信息,我根据我的个人理解与思路大致画了个图

b8e0de61-5693-405e-8ea6-d186750f223e

situ2001 commented 2 years ago

第三方

AuthenticationService 是兼容插件 API 的实现,本身只是为了实现第三方登录,协同有关的用户信息并不是第三方,而是由 IDE 集成方提供的

ok,对于这个用户信息,我根据我的个人理解与思路大致画了个图

b8e0de61-5693-405e-8ea6-d186750f223e

另外一种简单的方法:在startup处将用户id、用户名等信息写到AppConfig里,协同模块在初始化时候直接读取即可。这样做,用户信息在web的整个生命周期下都是不变的,只有刷新页面的时候,信息才可能会改变(取决于集成方的具体实现)

https://github.com/situ2001/opensumi-core/blob/7f598a64f264300a1712a996f31be72039cc916e/packages/core-browser/src/bootstrap/app.ts#L160

situ2001 commented 2 years ago

协同模块要用到的用户信息简单定义如下

export interface UserInfo {
  id: string; // unique id
  nickname: string; // will be displayed on live cursor
  // may be more data fields
}
situ2001 commented 2 years ago

第三方

AuthenticationService 是兼容插件 API 的实现,本身只是为了实现第三方登录,协同有关的用户信息并不是第三方,而是由 IDE 集成方提供的

ok,对于这个用户信息,我根据我的个人理解与思路大致画了个图

b8e0de61-5693-405e-8ea6-d186750f223e

为了便于未来协同功能的拓展,用户信息注册 使用的是贡献点机制,而不是直接添加到AppConfig

TODO

situ2001 commented 2 years ago

Deferred due to #5