fix: Further restrict viewer permissions

This commit is contained in:
Tom Moor
2023-12-20 19:07:34 -04:00
parent 9b5a7394b8
commit df65575776

View File

@@ -246,7 +246,7 @@ allow(User, "pinToHome", Document, (user, document) => {
}); });
allow(User, "delete", Document, (user, document) => { allow(User, "delete", Document, (user, document) => {
if (!document || document.deletedAt) { if (!document || document.deletedAt || user.isViewer) {
return false; return false;
} }
@@ -271,7 +271,7 @@ allow(User, "delete", Document, (user, document) => {
}); });
allow(User, "permanentDelete", Document, (user, document) => { allow(User, "permanentDelete", Document, (user, document) => {
if (!document || !document.deletedAt) { if (!document || !document.deletedAt || user.isViewer) {
return false; return false;
} }
@@ -283,7 +283,12 @@ allow(User, "permanentDelete", Document, (user, document) => {
return false; return false;
} }
return user.teamId === document.teamId; // unpublished drafts can always be deleted by their owner
if (document.isDraft && user.id === document.createdById) {
return true;
}
return user.teamId === document.teamId && user.isAdmin;
}); });
allow(User, "restore", Document, (user, document) => { allow(User, "restore", Document, (user, document) => {
@@ -321,7 +326,7 @@ allow(User, "archive", Document, (user, document) => {
}); });
allow(User, "unarchive", Document, (user, document) => { allow(User, "unarchive", Document, (user, document) => {
if (!document) { if (!document || !document.archivedAt || document.deletedAt) {
return false; return false;
} }
invariant( invariant(
@@ -331,12 +336,7 @@ allow(User, "unarchive", Document, (user, document) => {
if (cannot(user, "updateDocument", document.collection)) { if (cannot(user, "updateDocument", document.collection)) {
return false; return false;
} }
if (!document.archivedAt) {
return false;
}
if (document.deletedAt) {
return false;
}
return user.teamId === document.teamId; return user.teamId === document.teamId;
}); });
@@ -348,7 +348,7 @@ allow(
); );
allow(User, "unpublish", Document, (user, document) => { allow(User, "unpublish", Document, (user, document) => {
if (!document || !document.isActive || document.isDraft) { if (!document || !document.isActive || document.isDraft || user.isViewer) {
return false; return false;
} }
invariant( invariant(