Skip to content
File

Blob: src/shared/entitlements/share-management.ts

typescript38 lines
1import { isWorkspaceAdminOrOwnerRole, type ResolvedWorkspaceRole } from "@/shared/entitlements/common";
2import type { GranteeType } from "@/shared/types";
3 
4export function canCreateUserShare(workspaceRole: ResolvedWorkspaceRole, targetIsWorkspaceMember: boolean): boolean {
5 if (workspaceRole === "guest" || workspaceRole === "none") return false;
6 if (isWorkspaceAdminOrOwnerRole(workspaceRole)) return true;
7 return targetIsWorkspaceMember;
8}
9 
10export function canCreateUserShareByEmail(workspaceRole: ResolvedWorkspaceRole): boolean {
11 return isWorkspaceAdminOrOwnerRole(workspaceRole);
12}
13 
14export function canCreateLinkShare(workspaceRole: ResolvedWorkspaceRole): boolean {
15 return isWorkspaceAdminOrOwnerRole(workspaceRole);
16}
17 
18export function canRevokeShare(options: {
19 workspaceRole: ResolvedWorkspaceRole;
20 granteeType: GranteeType;
21 shareCreatedByViewer: boolean;
22 granteeIsWorkspaceMember: boolean;
23}): boolean {
24 const { workspaceRole, granteeType, shareCreatedByViewer, granteeIsWorkspaceMember } = options;
25 if (workspaceRole === "guest" || workspaceRole === "none") return false;
26 if (isWorkspaceAdminOrOwnerRole(workspaceRole)) return true;
27 
28 return granteeType === "user" && shareCreatedByViewer && granteeIsWorkspaceMember;
29}
30 
31export function canRevealLinkTokens(workspaceRole: ResolvedWorkspaceRole): boolean {
32 return isWorkspaceAdminOrOwnerRole(workspaceRole);
33}
34 
35export function canRevealShareGranteeEmails(workspaceRole: ResolvedWorkspaceRole): boolean {
36 return workspaceRole !== "guest" && workspaceRole !== "none";
37}