import React, { useState } from "react"; import { AuthProviderProps, User } from "./types"; import { AuthContext } from "./context"; export function AuthProvider({ localRoles, signinService, signoutService, children, onLogin, onLogout }: AuthProviderProps) { const storedUser = sessionStorage.getItem('user'); const [user, setUser] = useState(storedUser ? JSON.parse(storedUser) : null); const signin = async (username: string, password: string, callback: (error?: string) => void) => { try { const response = await signinService(username, password); if (response !== null) { setUser(response); sessionStorage.setItem("user", JSON.stringify(response)); onLogin && onLogin(); callback(); } else { callback("Error"); } } catch (error) { const resMessage = (error.response && error.response.data && error.response.data.message) || error.message || error.toString(); callback(resMessage); } }; const signout = (callback: () => void) => { signoutService(); setUser(null); sessionStorage.setItem('user', JSON.stringify(null)); onLogout && onLogout(); callback(); }; const checkPermission = (requiredPermission: string[] | undefined) => { if (!user) return false; if (requiredPermission !== undefined && requiredPermission !== null) { const userpermission = user.roles; const arr = userpermission.map((object: any) => object); const newArray = []; for (var i = 0; i < requiredPermission.length; i++) { const p = requiredPermission[i]; for (var ii = 0; ii < localRoles.Roles.length; ii++) { if (localRoles.Roles[ii].Key === p) newArray.push(localRoles.Roles[ii].RoleKey); } } const isAllowed = newArray.some((allowed) => arr.includes(allowed)); return isAllowed; } return false; }; const value = { user, signin, signout, checkPermission, localRoles }; return {children}; }