fix: dashboard not showing when root accessn not provided

This commit is contained in:
=
2024-09-26 15:13:07 +05:30
parent 4f5c49a529
commit 3d8fbc0a58
2 changed files with 157 additions and 156 deletions
@@ -1,3 +1,4 @@
import { ForbiddenError } from "@casl/ability";
import { z } from "zod"; import { z } from "zod";
import { SecretFoldersSchema, SecretImportsSchema, SecretTagsSchema } from "@app/db/schemas"; import { SecretFoldersSchema, SecretImportsSchema, SecretTagsSchema } from "@app/db/schemas";
@@ -173,6 +174,7 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => {
} }
} }
try {
if (includeDynamicSecrets) { if (includeDynamicSecrets) {
// this is the unique count, ie duplicate secrets across envs only count as 1 // this is the unique count, ie duplicate secrets across envs only count as 1
totalDynamicSecretCount = await server.services.dynamicSecret.getCountMultiEnv({ totalDynamicSecretCount = await server.services.dynamicSecret.getCountMultiEnv({
@@ -276,6 +278,11 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => {
} }
} }
} }
} catch (error) {
if (!(error instanceof ForbiddenError)) {
throw error;
}
}
return { return {
folders, folders,
@@ -498,6 +505,7 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => {
} }
} }
try {
if (includeDynamicSecrets) { if (includeDynamicSecrets) {
totalDynamicSecretCount = await server.services.dynamicSecret.getDynamicSecretCount({ totalDynamicSecretCount = await server.services.dynamicSecret.getDynamicSecretCount({
actor: req.permission.type, actor: req.permission.type,
@@ -594,6 +602,11 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => {
} }
} }
} }
} catch (error) {
if (!(error instanceof ForbiddenError)) {
throw error;
}
}
return { return {
imports, imports,
@@ -191,20 +191,10 @@ export const SecretOverviewPage = () => {
const userAvailableEnvs = currentWorkspace?.environments || []; const userAvailableEnvs = currentWorkspace?.environments || [];
const readableEnvs = userAvailableEnvs?.filter(({ slug }) => const [visibleEnvs, setVisibleEnvs] = useState(userAvailableEnvs);
permission.can(
ProjectPermissionActions.Read,
subject(ProjectPermissionSub.Secrets, {
environment: slug,
secretPath
})
)
);
const [visibleEnvs, setVisibleEnvs] = useState(readableEnvs);
useEffect(() => { useEffect(() => {
setVisibleEnvs(readableEnvs); setVisibleEnvs(userAvailableEnvs);
}, [userAvailableEnvs, secretPath]); }, [userAvailableEnvs, secretPath]);
const { isImportedSecretPresentInEnv, getImportedSecretByKey } = useGetImportedSecretsAllEnvs({ const { isImportedSecretPresentInEnv, getImportedSecretByKey } = useGetImportedSecretsAllEnvs({
@@ -529,9 +519,7 @@ export const SecretOverviewPage = () => {
const isTableEmpty = totalCount === 0; const isTableEmpty = totalCount === 0;
const isTableFiltered = const isTableFiltered = Boolean(Object.values(filter).filter((enabled) => !enabled).length);
Boolean(Object.values(filter).filter((enabled) => !enabled).length) ||
visibleEnvs.length !== readableEnvs?.length;
if (!isProjectV3) if (!isProjectV3)
return ( return (
@@ -611,7 +599,7 @@ export const SecretOverviewPage = () => {
</DropdownMenuTrigger> </DropdownMenuTrigger>
<DropdownMenuContent align="end"> <DropdownMenuContent align="end">
<DropdownMenuLabel>Choose visible environments</DropdownMenuLabel> <DropdownMenuLabel>Choose visible environments</DropdownMenuLabel>
{readableEnvs.map((availableEnv) => { {userAvailableEnvs.map((availableEnv) => {
const { id: envId, name } = availableEnv; const { id: envId, name } = availableEnv;
const isEnvSelected = visibleEnvs.map((env) => env.id).includes(envId); const isEnvSelected = visibleEnvs.map((env) => env.id).includes(envId);