Files
sendou.ink/app/modules/permissions/mapper.server.ts
Kalle 91469da4e3
Some checks failed
E2E Tests / e2e (push) Has been cancelled
Tests and checks on push / run-checks-and-tests (push) Has been cancelled
Updates translation progress / update-translation-progress-issue (push) Has been cancelled
Add scanner access to specific user
2026-08-11 20:37:51 +03:00

82 lines
1.4 KiB
TypeScript

import type { UserWithPlusTier } from "~/utils/kysely.server";
import { userDiscordIdIsAged } from "~/utils/users";
import type { Role } from "./types";
import {
isAdmin,
isDev,
isQa,
isScannerTester,
isStaff,
isSupporter,
} from "./utils";
export function userRoles(
user: Pick<
UserWithPlusTier,
| "id"
| "discordId"
| "plusTier"
| "isArtist"
| "isTournamentOrganizer"
| "isVideoAdder"
| "isApiAccesser"
| "patronTier"
>,
) {
const result: Array<Role> = [];
if (isAdmin(user)) {
result.push("ADMIN");
}
if (isStaff(user) || isAdmin(user)) {
result.push("STAFF");
}
if (isDev(user)) {
result.push("DEV");
}
if (isQa(user)) {
result.push("QA");
}
if (isScannerTester(user)) {
result.push("SCANNER_TESTER");
}
if (typeof user.patronTier === "number") {
result.push("MINOR_SUPPORT");
}
if (isSupporter(user)) {
result.push("SUPPORTER");
}
if (typeof user.plusTier === "number") {
result.push("PLUS_SERVER_MEMBER");
}
if (user.isArtist) {
result.push("ARTIST");
}
if (user.isVideoAdder) {
result.push("VIDEO_ADDER");
}
if (user.isTournamentOrganizer || isSupporter(user)) {
result.push("TOURNAMENT_ADDER");
}
if (userDiscordIdIsAged(user) || isSupporter(user)) {
result.push("CALENDAR_EVENT_ADDER");
}
if (user.isTournamentOrganizer || user.isApiAccesser || isSupporter(user)) {
result.push("API_ACCESSER");
}
return result;
}