Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Stage2] Define user model #3

Closed
8 tasks done
situ2001 opened this issue Aug 3, 2022 · 7 comments · Fixed by #12
Closed
8 tasks done

[Stage2] Define user model #3

situ2001 opened this issue Aug 3, 2022 · 7 comments · Fixed by #12
Assignees

Comments

@situ2001
Copy link
Owner

situ2001 commented Aug 3, 2022

本阶段为 opensumi#1097 定义标准的用户模型

Date: from 08/01 to 08/12

Todo

  • 制定协同状态下的光标样式 (做了个demo: https://stackblitz.com/edit/vitejs-vite-qdn58u?file=main.ts)
  • 阅读opensumi源代码,查看框架里是否已经有类似的“用户模型”(避免重复)
  • 定义协同状态下的用户模型(目前有nickname, id)
  • 定义编辑器中,他人的光标样式
  • 将用户模型的信息给设置到yjs的awareness中
  • 显示在其他用户的selection的末尾
  • 不同的用户的光标与选区应该有不同的颜色
  • 适当重构
@situ2001 situ2001 self-assigned this Aug 3, 2022
@situ2001
Copy link
Owner Author

situ2001 commented Aug 4, 2022

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

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

export interface IAuthenticationService {

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

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

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

export interface AuthenticationSession {
id: string;
accessToken: string;
account: {
label: string;
id: string;
};
scopes: ReadonlyArray<string>;
}

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

@Aaaaash
Copy link

Aaaaash commented Aug 4, 2022

第三方

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

@situ2001
Copy link
Owner Author

situ2001 commented Aug 4, 2022

第三方

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

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

b8e0de61-5693-405e-8ea6-d186750f223e

@situ2001
Copy link
Owner Author

situ2001 commented Aug 4, 2022

第三方

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

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

b8e0de61-5693-405e-8ea6-d186750f223e

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

...restOpts // rest part 为 AppConfig

@situ2001
Copy link
Owner Author

situ2001 commented Aug 5, 2022

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

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

@situ2001
Copy link
Owner Author

situ2001 commented Aug 5, 2022

第三方

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

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

b8e0de61-5693-405e-8ea6-d186750f223e

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

TODO

  • UserInfoForCollaborationContribution重命名为CollaborationContribution

@situ2001
Copy link
Owner Author

situ2001 commented Aug 6, 2022

Deferred due to #5

@situ2001 situ2001 linked a pull request Aug 12, 2022 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants