mirror of
https://github.com/andwati/dokploy.git
synced 2026-11-09 21:45:17 +00:00
- Introduced new test files for permission checks, including `check-permission.test.ts`, `enterprise-only-resources.test.ts`, `resolve-permissions.test.ts`, and `service-access.test.ts`. - Implemented permission checks in various components to ensure actions are gated by user permissions, including `ShowTraefikConfig`, `UpdateTraefikConfig`, `ShowVolumes`, `ShowDomains`, and others. - Enhanced the logic for displaying UI elements based on user permissions, ensuring that only authorized users can access or modify resources.
73 lines
2.1 KiB
TypeScript
73 lines
2.1 KiB
TypeScript
import { File, Loader2 } from "lucide-react";
|
|
import { CodeEditor } from "@/components/shared/code-editor";
|
|
import {
|
|
Card,
|
|
CardContent,
|
|
CardDescription,
|
|
CardHeader,
|
|
CardTitle,
|
|
} from "@/components/ui/card";
|
|
import { api } from "@/utils/api";
|
|
import { UpdateTraefikConfig } from "./update-traefik-config";
|
|
|
|
interface Props {
|
|
applicationId: string;
|
|
}
|
|
|
|
export const ShowTraefikConfig = ({ applicationId }: Props) => {
|
|
const { data: permissions } = api.user.getPermissions.useQuery();
|
|
const canRead = permissions?.traefikFiles.read ?? false;
|
|
const { data, isPending } = api.application.readTraefikConfig.useQuery(
|
|
{
|
|
applicationId,
|
|
},
|
|
{ enabled: !!applicationId && canRead },
|
|
);
|
|
|
|
if (!canRead) return null;
|
|
|
|
return (
|
|
<Card className="bg-background">
|
|
<CardHeader className="flex flex-row justify-between">
|
|
<div>
|
|
<CardTitle className="text-xl">Traefik</CardTitle>
|
|
<CardDescription>
|
|
Modify the traefik config, in rare cases you may need to add
|
|
specific config, be careful because modifying incorrectly can break
|
|
traefik and your application
|
|
</CardDescription>
|
|
</div>
|
|
</CardHeader>
|
|
<CardContent className="flex flex-col gap-4">
|
|
{isPending ? (
|
|
<span className="text-base text-muted-foreground flex flex-row gap-3 items-center justify-center min-h-[10vh]">
|
|
Loading...
|
|
<Loader2 className="animate-spin" />
|
|
</span>
|
|
) : !data ? (
|
|
<div className="flex w-full flex-col items-center justify-center gap-3 pt-10">
|
|
<File className="size-8 text-muted-foreground" />
|
|
<span className="text-base text-muted-foreground">
|
|
No traefik config detected
|
|
</span>
|
|
</div>
|
|
) : (
|
|
<div className="flex flex-col pt-2 relative">
|
|
<div className="flex flex-col gap-6 max-h-[35rem] min-h-[10rem] overflow-y-auto">
|
|
<CodeEditor
|
|
lineWrapping
|
|
value={data || "Empty"}
|
|
disabled
|
|
className="font-mono"
|
|
/>
|
|
<div className="flex justify-end absolute z-50 right-6 top-6">
|
|
<UpdateTraefikConfig applicationId={applicationId} />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
)}
|
|
</CardContent>
|
|
</Card>
|
|
);
|
|
};
|