Files
outline/server/policies/integration.ts
2024-03-31 17:28:35 -07:00

32 lines
722 B
TypeScript

import { IntegrationType } from "@shared/types";
import { Integration, User, Team } from "@server/models";
import { allow } from "./cancan";
import {
and,
isOwner,
isTeamAdmin,
isTeamModel,
isTeamMutable,
or,
} from "./utils";
allow(User, "createIntegration", Team, (actor, team) =>
and(isTeamAdmin(actor, team), isTeamMutable(actor))
);
allow(User, "read", Integration, isTeamModel);
allow(User, ["update", "delete"], Integration, (actor, integration) =>
and(
isTeamModel(actor, integration),
isTeamMutable(actor),
!actor.isGuest,
!actor.isViewer,
or(
actor.isAdmin,
isOwner(actor, integration) &&
integration.type === IntegrationType.LinkedAccount
)
)
);