|
@@ -11,14 +11,26 @@ import cn from "classnames";
|
|
|
import React from "react";
|
|
import React from "react";
|
|
|
import { HasPermission, NavLink } from "src/components";
|
|
import { HasPermission, NavLink } from "src/components";
|
|
|
import { T } from "src/locale";
|
|
import { T } from "src/locale";
|
|
|
|
|
+import {
|
|
|
|
|
+ ACCESS_LISTS,
|
|
|
|
|
+ ADMIN,
|
|
|
|
|
+ CERTIFICATES,
|
|
|
|
|
+ DEAD_HOSTS,
|
|
|
|
|
+ type MANAGE,
|
|
|
|
|
+ PROXY_HOSTS,
|
|
|
|
|
+ REDIRECTION_HOSTS,
|
|
|
|
|
+ type Section,
|
|
|
|
|
+ STREAMS,
|
|
|
|
|
+ VIEW,
|
|
|
|
|
+} from "src/modules/Permissions";
|
|
|
|
|
|
|
|
interface MenuItem {
|
|
interface MenuItem {
|
|
|
label: string;
|
|
label: string;
|
|
|
icon?: React.ElementType;
|
|
icon?: React.ElementType;
|
|
|
to?: string;
|
|
to?: string;
|
|
|
items?: MenuItem[];
|
|
items?: MenuItem[];
|
|
|
- permission?: string;
|
|
|
|
|
- permissionType?: "view" | "manage";
|
|
|
|
|
|
|
+ permissionSection?: Section | typeof ADMIN;
|
|
|
|
|
+ permission?: typeof VIEW | typeof MANAGE;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const menuItems: MenuItem[] = [
|
|
const menuItems: MenuItem[] = [
|
|
@@ -34,26 +46,26 @@ const menuItems: MenuItem[] = [
|
|
|
{
|
|
{
|
|
|
to: "/nginx/proxy",
|
|
to: "/nginx/proxy",
|
|
|
label: "proxy-hosts",
|
|
label: "proxy-hosts",
|
|
|
- permission: "proxyHosts",
|
|
|
|
|
- permissionType: "view",
|
|
|
|
|
|
|
+ permissionSection: PROXY_HOSTS,
|
|
|
|
|
+ permission: VIEW,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
to: "/nginx/redirection",
|
|
to: "/nginx/redirection",
|
|
|
label: "redirection-hosts",
|
|
label: "redirection-hosts",
|
|
|
- permission: "redirectionHosts",
|
|
|
|
|
- permissionType: "view",
|
|
|
|
|
|
|
+ permissionSection: REDIRECTION_HOSTS,
|
|
|
|
|
+ permission: VIEW,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
to: "/nginx/stream",
|
|
to: "/nginx/stream",
|
|
|
label: "streams",
|
|
label: "streams",
|
|
|
- permission: "streams",
|
|
|
|
|
- permissionType: "view",
|
|
|
|
|
|
|
+ permissionSection: STREAMS,
|
|
|
|
|
+ permission: VIEW,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
to: "/nginx/404",
|
|
to: "/nginx/404",
|
|
|
label: "dead-hosts",
|
|
label: "dead-hosts",
|
|
|
- permission: "deadHosts",
|
|
|
|
|
- permissionType: "view",
|
|
|
|
|
|
|
+ permissionSection: DEAD_HOSTS,
|
|
|
|
|
+ permission: VIEW,
|
|
|
},
|
|
},
|
|
|
],
|
|
],
|
|
|
},
|
|
},
|
|
@@ -61,33 +73,33 @@ const menuItems: MenuItem[] = [
|
|
|
to: "/access",
|
|
to: "/access",
|
|
|
icon: IconLock,
|
|
icon: IconLock,
|
|
|
label: "access-lists",
|
|
label: "access-lists",
|
|
|
- permission: "accessLists",
|
|
|
|
|
- permissionType: "view",
|
|
|
|
|
|
|
+ permissionSection: ACCESS_LISTS,
|
|
|
|
|
+ permission: VIEW,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
to: "/certificates",
|
|
to: "/certificates",
|
|
|
icon: IconShield,
|
|
icon: IconShield,
|
|
|
label: "certificates",
|
|
label: "certificates",
|
|
|
- permission: "certificates",
|
|
|
|
|
- permissionType: "view",
|
|
|
|
|
|
|
+ permissionSection: CERTIFICATES,
|
|
|
|
|
+ permission: VIEW,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
to: "/users",
|
|
to: "/users",
|
|
|
icon: IconUser,
|
|
icon: IconUser,
|
|
|
label: "users",
|
|
label: "users",
|
|
|
- permission: "admin",
|
|
|
|
|
|
|
+ permissionSection: ADMIN,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
to: "/audit-log",
|
|
to: "/audit-log",
|
|
|
icon: IconBook,
|
|
icon: IconBook,
|
|
|
label: "auditlogs",
|
|
label: "auditlogs",
|
|
|
- permission: "admin",
|
|
|
|
|
|
|
+ permissionSection: ADMIN,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
to: "/settings",
|
|
to: "/settings",
|
|
|
icon: IconSettings,
|
|
icon: IconSettings,
|
|
|
label: "settings",
|
|
label: "settings",
|
|
|
- permission: "admin",
|
|
|
|
|
|
|
+ permissionSection: ADMIN,
|
|
|
},
|
|
},
|
|
|
];
|
|
];
|
|
|
|
|
|
|
@@ -99,8 +111,8 @@ const getMenuItem = (item: MenuItem, onClick?: () => void) => {
|
|
|
return (
|
|
return (
|
|
|
<HasPermission
|
|
<HasPermission
|
|
|
key={`item-${item.label}`}
|
|
key={`item-${item.label}`}
|
|
|
- permission={item.permission || ""}
|
|
|
|
|
- type={item.permissionType || "view"}
|
|
|
|
|
|
|
+ section={item.permissionSection}
|
|
|
|
|
+ permission={item.permission || VIEW}
|
|
|
hideError
|
|
hideError
|
|
|
>
|
|
>
|
|
|
<li className="nav-item">
|
|
<li className="nav-item">
|
|
@@ -122,8 +134,8 @@ const getMenuDropown = (item: MenuItem, onClick?: () => void) => {
|
|
|
return (
|
|
return (
|
|
|
<HasPermission
|
|
<HasPermission
|
|
|
key={`item-${item.label}`}
|
|
key={`item-${item.label}`}
|
|
|
- permission={item.permission || ""}
|
|
|
|
|
- type={item.permissionType || "view"}
|
|
|
|
|
|
|
+ section={item.permissionSection}
|
|
|
|
|
+ permission={item.permission || VIEW}
|
|
|
hideError
|
|
hideError
|
|
|
>
|
|
>
|
|
|
<li className={cns}>
|
|
<li className={cns}>
|
|
@@ -147,8 +159,8 @@ const getMenuDropown = (item: MenuItem, onClick?: () => void) => {
|
|
|
return (
|
|
return (
|
|
|
<HasPermission
|
|
<HasPermission
|
|
|
key={`${idx}-${subitem.to}`}
|
|
key={`${idx}-${subitem.to}`}
|
|
|
- permission={subitem.permission || ""}
|
|
|
|
|
- type={subitem.permissionType || "view"}
|
|
|
|
|
|
|
+ section={subitem.permissionSection}
|
|
|
|
|
+ permission={subitem.permission || VIEW}
|
|
|
hideError
|
|
hideError
|
|
|
>
|
|
>
|
|
|
<NavLink to={subitem.to} isDropdownItem onClick={onClick}>
|
|
<NavLink to={subitem.to} isDropdownItem onClick={onClick}>
|