1
0
forked from baron/baron-sso
Files
baron-sso/devfront/src/features/clients/clientCreateAccess.ts
2026-06-10 10:11:52 +09:00

50 lines
1.0 KiB
TypeScript

import type { DeveloperAccessStatus } from "../../lib/devApi";
import {
hasDeveloperAccessForPages,
isDeveloperRequestPendingForPages,
} from "../developer-access/developerAccessPages";
export type ClientCreateAccessState =
| "can_create"
| "pending"
| "request_required"
| "forbidden";
type ResolveClientCreateAccessParams = {
role: string;
accessStatus?: DeveloperAccessStatus;
};
function canSelfRequestDeveloperAccess(role: string) {
return role === "user";
}
export function resolveClientCreateAccess({
role,
accessStatus,
}: ResolveClientCreateAccessParams): ClientCreateAccessState {
if (!role.trim()) {
return "request_required";
}
if (!canSelfRequestDeveloperAccess(role)) {
return "can_create";
}
if (
hasDeveloperAccessForPages(accessStatus?.approvedPages, ["client_create"])
) {
return "can_create";
}
if (
isDeveloperRequestPendingForPages(accessStatus?.pendingPages, [
"client_create",
])
) {
return "pending";
}
return "request_required";
}