fleet/frontend/components/AuthAnyMaintainerGlobalAdminRoutes/AuthAnyMaintainerGlobalAdminRoutes.tsx
Gabriel Hernandez f127f8c2cd
add new permission routes and messaging (#915)
* add new permission routes and messaging

* add messaing for no permissions

* query-library-os-icons (#913)

Added query library os icons to website assets.

* fix broken check for config before api responds

Co-authored-by: Mike Thomas <78363703+mike-j-thomas@users.noreply.github.com>
2021-06-04 14:00:14 +01:00

51 lines
1.2 KiB
TypeScript

import React from "react";
import { useDispatch, useSelector } from "react-redux";
import { push } from "react-router-redux";
import { IUser } from "interfaces/user";
import permissionUtils from "utilities/permissions";
import paths from "router/paths";
// @ts-ignore
import { renderFlash } from "redux/nodes/notifications/actions";
interface IAuthAnyMaintainerGlobalAdminRoutesProps {
children: JSX.Element;
}
interface IRootState {
auth: {
user: IUser;
};
}
const { HOME } = paths;
/**
* Checks if a user is a global admin or global maintainer when routing
*/
const AuthAnyMaintainerGlobalAdminRoutes = (
props: IAuthAnyMaintainerGlobalAdminRoutesProps
) => {
const { children } = props;
const dispatch = useDispatch();
const user = useSelector((state: IRootState) => state.auth.user);
if (!user) {
return null;
}
if (
!permissionUtils.isGlobalAdmin(user) &&
!permissionUtils.isGlobalMaintainer(user) &&
!permissionUtils.isAnyTeamMaintainer(user)
) {
dispatch(push(HOME));
dispatch(renderFlash("error", "You do not have permissions for that page"));
return null;
}
return <>{children}</>;
};
export default AuthAnyMaintainerGlobalAdminRoutes;