Files
homarr/packages/auth/permissions/integration-permissions.ts
T
Thomas Camlong 8ecdd13cd5 feat: port release-v2 experience improvements from PR #6582
Brings the semantically-correct unification work from the closed
agent/release-v2-experience PR into release/v2:

- universal create surface (header, board, spotlight) with permission-aware actions
- board empty state and setup checklist with widget/connection recipes
- in-widget integration editing via inspector modal, preserving unsaved widget settings
- single-source widget-integration capability map (nativeFeatureCapabilities)
- multi-endpoint Docker singleton with per-endpoint failure isolation, DOCKER_ENDPOINTS descriptors and service reconciliation
- Kubernetes multi-context registry with availability probing and context selector
- response-contract test harness and setup analytics property boundaries

Excludes the feature-platform generator/workbench tooling (deferred).
2026-08-16 17:30:13 +02:00

30 lines
1.2 KiB
TypeScript

import type { Session } from "next-auth";
import type { IntegrationPermission } from "@homarr/definitions";
export interface IntegrationPermissionsProps {
userPermissions: {
permission: IntegrationPermission;
}[];
groupPermissions: {
permission: IntegrationPermission;
}[];
}
export const constructIntegrationPermissions = (integration: IntegrationPermissionsProps, session: Session | null) => {
const permissions = integration.userPermissions
.concat(integration.groupPermissions)
.map(({ permission }) => permission);
const hasGlobalFullAccess = session?.user.permissions.includes("integration-full-all") ?? false;
const hasGlobalInteractAccess =
hasGlobalFullAccess || (session?.user.permissions.includes("integration-interact-all") ?? false);
const hasGlobalUseAccess =
hasGlobalInteractAccess || (session?.user.permissions.includes("integration-use-all") ?? false);
return {
hasFullAccess: hasGlobalFullAccess || permissions.includes("full"),
hasInteractAccess: hasGlobalInteractAccess || permissions.includes("full") || permissions.includes("interact"),
hasUseAccess: hasGlobalUseAccess || permissions.length >= 1,
};
};