Individual document sharing with permissions (#5814)
Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Tom Moor <tom@getoutline.com>
This commit is contained in:
@@ -39,6 +39,8 @@ const WEBHOOK_EVENTS = {
|
||||
"documents.move",
|
||||
"documents.update",
|
||||
"documents.title_change",
|
||||
"documents.add_user",
|
||||
"documents.remove_user",
|
||||
],
|
||||
collections: [
|
||||
"collections.create",
|
||||
|
||||
@@ -18,7 +18,7 @@ import {
|
||||
Revision,
|
||||
View,
|
||||
Share,
|
||||
UserPermission,
|
||||
UserMembership,
|
||||
GroupPermission,
|
||||
GroupUser,
|
||||
Comment,
|
||||
@@ -48,6 +48,7 @@ import {
|
||||
CollectionUserEvent,
|
||||
CommentEvent,
|
||||
DocumentEvent,
|
||||
DocumentUserEvent,
|
||||
Event,
|
||||
FileOperationEvent,
|
||||
GroupEvent,
|
||||
@@ -132,6 +133,10 @@ export default class DeliverWebhookTask extends BaseTask<Props> {
|
||||
case "documents.title_change":
|
||||
await this.handleDocumentEvent(subscription, event);
|
||||
return;
|
||||
case "documents.add_user":
|
||||
case "documents.remove_user":
|
||||
await this.handleDocumentUserEvent(subscription, event);
|
||||
return;
|
||||
case "documents.update.delayed":
|
||||
case "documents.update.debounced":
|
||||
// Ignored
|
||||
@@ -207,6 +212,9 @@ export default class DeliverWebhookTask extends BaseTask<Props> {
|
||||
case "views.create":
|
||||
await this.handleViewEvent(subscription, event);
|
||||
return;
|
||||
case "userMemberships.update":
|
||||
// Ignored
|
||||
return;
|
||||
default:
|
||||
assertUnreachable(event);
|
||||
}
|
||||
@@ -427,7 +435,7 @@ export default class DeliverWebhookTask extends BaseTask<Props> {
|
||||
subscription: WebhookSubscription,
|
||||
event: CollectionUserEvent
|
||||
): Promise<void> {
|
||||
const model = await UserPermission.scope([
|
||||
const model = await UserMembership.scope([
|
||||
"withUser",
|
||||
"withCollection",
|
||||
]).findOne({
|
||||
@@ -513,6 +521,33 @@ export default class DeliverWebhookTask extends BaseTask<Props> {
|
||||
});
|
||||
}
|
||||
|
||||
private async handleDocumentUserEvent(
|
||||
subscription: WebhookSubscription,
|
||||
event: DocumentUserEvent
|
||||
): Promise<void> {
|
||||
const model = await UserMembership.scope([
|
||||
"withUser",
|
||||
"withDocument",
|
||||
]).findOne({
|
||||
where: {
|
||||
documentId: event.documentId,
|
||||
userId: event.userId,
|
||||
},
|
||||
paranoid: false,
|
||||
});
|
||||
|
||||
await this.sendWebhook({
|
||||
event,
|
||||
subscription,
|
||||
payload: {
|
||||
id: event.modelId,
|
||||
model: model && presentMembership(model),
|
||||
document: model && (await presentDocument(model.document!)),
|
||||
user: model && presentUser(model.user),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
private async handleRevisionEvent(
|
||||
subscription: WebhookSubscription,
|
||||
event: RevisionEvent
|
||||
|
||||
Reference in New Issue
Block a user