mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
50 lines
No EOL
1.4 KiB
TypeScript
50 lines
No EOL
1.4 KiB
TypeScript
'use client';
|
|
import React from "react";
|
|
import { AuthContext } from "./AuthProvider";
|
|
|
|
interface AuthenticatedClientElementProps {
|
|
children: React.ReactNode;
|
|
checkMethod: 'authentication' | 'roles';
|
|
orgId?: string;
|
|
|
|
}
|
|
|
|
export const AuthenticatedClientElement = (props: AuthenticatedClientElementProps) => {
|
|
const auth: any = React.useContext(AuthContext);
|
|
|
|
// Available roles
|
|
const org_roles_values = ["admin", "owner"];
|
|
const user_roles_values = ["role_admin"];
|
|
|
|
|
|
|
|
function checkRoles() {
|
|
const org_id = props.orgId;
|
|
const org_roles = auth.userInfo.user_object.orgs;
|
|
const user_roles = auth.userInfo.user_object.roles;
|
|
const org_role = org_roles.find((org: any) => org.org_id == org_id);
|
|
const user_role = user_roles.find((role: any) => role.org_id == org_id);
|
|
|
|
if (org_role && user_role) {
|
|
if (org_roles_values.includes(org_role.org_role) || user_roles_values.includes(user_role.role_id)) {
|
|
return true;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if ((props.checkMethod == 'authentication' && auth.isAuthenticated) || (auth.isAuthenticated && props.checkMethod == 'roles' && checkRoles())) {
|
|
return <>{props.children}</>;
|
|
}
|
|
return <></>;
|
|
|
|
|
|
}
|
|
|
|
export default AuthenticatedClientElement |