feat(server): add project sharing access control

This commit is contained in:
2026-07-10 14:46:18 +08:00
parent 60130b3d9b
commit 9d47cb9bbd
41 changed files with 3069 additions and 17 deletions
+115
View File
@@ -865,6 +865,97 @@ type DeleteAssetResponse {
Deleted bool `json:"deleted"`
}
type SharePerson {
Id string `json:"id"`
UserId string `json:"userId,optional"`
Name string `json:"name,optional"`
Identifier string `json:"identifier,optional"`
AvatarUrl string `json:"avatarUrl,optional"`
Permission string `json:"permission"`
CreatedAt string `json:"createdAt,optional"`
}
type ShareVisitor {
Id string `json:"id"`
UserId string `json:"userId,optional"`
Name string `json:"name"`
Identifier string `json:"identifier,optional"`
AvatarUrl string `json:"avatarUrl,optional"`
VisitCount int64 `json:"visitCount"`
LastSeenAt string `json:"lastSeenAt"`
}
type ShareCapabilities {
CanViewCanvas bool `json:"canViewCanvas"`
CanViewChat bool `json:"canViewChat"`
CanEdit bool `json:"canEdit"`
CanManage bool `json:"canManage"`
}
type ShareAccess {
Permission string `json:"permission"`
Source string `json:"source"`
Authenticated bool `json:"authenticated"`
IsOwner bool `json:"isOwner"`
Capabilities ShareCapabilities `json:"capabilities"`
}
type ShareSettings {
ProjectId string `json:"projectId"`
ShareId string `json:"shareId,optional"`
LinkPermission string `json:"linkPermission"`
Owner SharePerson `json:"owner"`
Members []SharePerson `json:"members"`
VisitorCount int64 `json:"visitorCount"`
UpdatedAt string `json:"updatedAt,optional"`
}
type ShareSettingsRequest {
Id string `path:"id"`
}
type ShareSettingsResponse {
Settings ShareSettings `json:"settings"`
}
type UpdateShareLinkRequest {
Id string `path:"id"`
Permission string `json:"permission"`
}
type InviteShareMemberRequest {
Id string `path:"id"`
Identifier string `json:"identifier"`
Permission string `json:"permission"`
}
type UpdateShareMemberRequest {
Id string `path:"id"`
MemberId string `path:"memberId"`
Permission string `json:"permission"`
}
type DeleteShareMemberRequest {
Id string `path:"id"`
MemberId string `path:"memberId"`
}
type ShareVisitorsResponse {
Visitors []ShareVisitor `json:"visitors"`
}
type ResolveShareRequest {
ShareId string `path:"shareId"`
VisitorId string `header:"X-Share-Visitor,optional"`
}
type ResolveShareResponse {
ShareId string `json:"shareId"`
Project Project `json:"project"`
Access ShareAccess `json:"access"`
UpdatedAt string `json:"updatedAt"`
}
@server (
prefix: /api
)
@@ -1021,5 +1112,29 @@ service img_infinite_canvas-api {
@handler deleteAsset
delete /assets (DeleteAssetRequest) returns (DeleteAssetResponse)
@handler getShareSettings
get /projects/:id/sharing (ShareSettingsRequest) returns (ShareSettingsResponse)
@handler updateShareLink
put /projects/:id/sharing/link (UpdateShareLinkRequest) returns (ShareSettingsResponse)
@handler inviteShareMember
post /projects/:id/sharing/members (InviteShareMemberRequest) returns (ShareSettingsResponse)
@handler updateShareMember
patch /projects/:id/sharing/members/:memberId (UpdateShareMemberRequest) returns (ShareSettingsResponse)
@handler deleteShareMember
delete /projects/:id/sharing/members/:memberId (DeleteShareMemberRequest) returns (ShareSettingsResponse)
@handler listShareVisitors
get /projects/:id/sharing/visitors (ShareSettingsRequest) returns (ShareVisitorsResponse)
@handler revokeShareAccess
delete /projects/:id/sharing/access (ShareSettingsRequest) returns (ShareSettingsResponse)
@handler resolveShare
get /shares/:shareId (ResolveShareRequest) returns (ResolveShareResponse)
}