Skip to content

Instantly share code, notes, and snippets.

@createdbymahmood
Created December 18, 2020 16:34
Show Gist options
  • Save createdbymahmood/e7082abeba71b525ec660f936868a208 to your computer and use it in GitHub Desktop.
Save createdbymahmood/e7082abeba71b525ec660f936868a208 to your computer and use it in GitHub Desktop.
acl for pages in next js
export const accesKeys = {
guest: {
home: true,
users: true,
user: true,
},
};
import { ComponentType } from "react";
import { accesKeys } from "constants/accesKeys";
import { useRouter } from "next/router";
import { useLayoutEffectOnce } from "helpers/useEffectOnce";
import get from "lodash/get";
export const injectAuthConfig = (accessKey: string) => {
return function <T>(Component: ComponentType<T>) {
return function (props: T): JSX.Element {
console.log(accessKey);
const hasAccess = get(accesKeys.guest, accessKey);
if (hasAccess === undefined) {
throw new Error(
"that access key shit must be correctly provided"
);
}
const router = useRouter();
useLayoutEffectOnce(() => {
if (!hasAccess) {
router.push("/");
}
});
return <Component {...props} />;
};
};
};
export default compose(
injectAuthConfig("home"),
)(Index);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment