This commit is contained in:
Muhammad Zakir Ramadhan
2025-11-25 19:55:10 +07:00
2 changed files with 6 additions and 40 deletions
@@ -1,18 +1,10 @@
import { lazy, LazyExoticComponent, ReactNode } from 'react';
import { ActionFunction, LoaderFunction, RouteObject } from 'react-router';
type TPermissionItem = {
id: string;
name: string;
created_at: string;
updated_at: string;
};
interface PageModuleExports {
default: () => ReactNode;
loader?: LoaderFunction;
action?: ActionFunction;
permissions?: Array<string>;
}
interface LoadingModuleExports {
@@ -58,18 +50,8 @@ export function convertPagesToRoute(
return 'loader' in result ? result.loader?.(args) : null;
},
async guard() {
const result = (await importer()) as PageModuleExports;
const localStoragePermission = localStorage.getItem('permissions');
const permissions: TPermissionItem[] | undefined =
localStoragePermission
? JSON.parse(localStoragePermission)
: undefined;
return 'permissions' in result
? result.permissions?.every(
(permission) =>
permissions?.some((item) => permission === item.name) || false
) || false
: true;
// Permission checking removed - always allow access
return true;
},
});
routes = mergeRoutes(routes, route);
+4 -20
View File
@@ -1,27 +1,11 @@
import { FC, PropsWithChildren, ReactNode, useMemo } from 'react';
import { useSession } from '../../hooks/use-session';
import { FC, PropsWithChildren, ReactNode } from 'react';
type TProps = PropsWithChildren<{
permissions: Array<string>;
permissions?: Array<string>;
fallback?: ReactNode;
}>;
export const Guard: FC<TProps> = (props): ReactNode => {
const { session } = useSession();
const permissionKeys = useMemo(() => {
return session?.user?.role?.permissions.map((perm) => perm.name) ?? [];
}, [session?.user?.role]);
const allowed = useMemo(() => {
return props.permissions.every((permission) =>
permissionKeys.includes(permission)
);
}, [permissionKeys, props.permissions]);
if (allowed) {
return props.children;
}
return props.fallback ?? null;
// Permission checking removed - always allow access
return props.children;
};