32 lines
722 B
TypeScript
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
|
|
)
|
|
)
|
|
);
|