92 lines
2.1 KiB
TypeScript
92 lines
2.1 KiB
TypeScript
import env from "@server/env";
|
|
import { IncorrectEditionError } from "@server/errors";
|
|
import { User, Team } from "@server/models";
|
|
import Model from "@server/models/base/Model";
|
|
|
|
export function and(...args: boolean[]) {
|
|
return args.every(Boolean);
|
|
}
|
|
|
|
export function or(...args: boolean[]) {
|
|
return args.some(Boolean);
|
|
}
|
|
|
|
/**
|
|
* Check if the actor is present in the same team as the model.
|
|
*
|
|
* @param actor The actor to check
|
|
* @param model The model to check
|
|
* @returns True if the actor is in the same team as the model
|
|
*/
|
|
export function isTeamModel(
|
|
actor: User,
|
|
model: Model | null | undefined
|
|
): model is Model {
|
|
if (!model) {
|
|
return false;
|
|
}
|
|
if (model instanceof Team) {
|
|
return actor.teamId === model.id;
|
|
}
|
|
if ("teamId" in model) {
|
|
return actor.teamId === model.teamId;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check if the actor is the owner of the model.
|
|
*
|
|
* @param actor The actor to check
|
|
* @param model The model to check
|
|
* @returns True if the actor is the owner of the model
|
|
*/
|
|
export function isOwner(
|
|
actor: User,
|
|
model: Model | null | undefined
|
|
): model is Model {
|
|
if (!model) {
|
|
return false;
|
|
}
|
|
if ("userId" in model) {
|
|
return actor.id === model.userId;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check if the actor is an admin of the team.
|
|
*
|
|
* @param actor The actor to check
|
|
* @param mode The model to check
|
|
* @returns True if the actor is an admin of the team the model belongs to
|
|
*/
|
|
export function isTeamAdmin(
|
|
actor: User,
|
|
model: Model | null | undefined
|
|
): model is Model {
|
|
return and(isTeamModel(actor, model), actor.isAdmin);
|
|
}
|
|
|
|
/**
|
|
* Check the actors team is mutable, meaning the team models can be modified.
|
|
*
|
|
* @param actor The actor to check
|
|
* @returns True if the actor's team is mutable
|
|
*/
|
|
export function isTeamMutable(_actor: User, _model?: Model | null) {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Check if this instance is running in the cloud-hosted environment.
|
|
*/
|
|
export function isCloudHosted() {
|
|
if (!env.isCloudHosted) {
|
|
throw IncorrectEditionError(
|
|
"Functionality is not available in this edition"
|
|
);
|
|
}
|
|
return true;
|
|
}
|