mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-11-05 01:45:14 +00:00
Permissions polish for restricted users
This commit is contained in:
@@ -47,11 +47,41 @@ const PermissionsModal = EasyModal.create(({ id, visible, remove }: Props) => {
|
||||
});
|
||||
};
|
||||
|
||||
// given the field and clicked permission, intelligently set the value, and
|
||||
// other values that depends on it.
|
||||
const handleChange = (form: any, field: any, perm: string) => {
|
||||
if (field.name === "proxyHosts" && perm !== "hidden" && form.values.accessLists === "hidden") {
|
||||
form.setFieldValue("accessLists", "view");
|
||||
}
|
||||
// certs are required for proxy and redirection hosts, and streams
|
||||
if (
|
||||
["proxyHosts", "redirectionHosts", "deadHosts", "streams"].includes(field.name) &&
|
||||
perm !== "hidden" &&
|
||||
form.values.certificates === "hidden"
|
||||
) {
|
||||
form.setFieldValue("certificates", "view");
|
||||
}
|
||||
|
||||
form.setFieldValue(field.name, perm);
|
||||
};
|
||||
|
||||
const getPermissionButtons = (field: any, form: any) => {
|
||||
const isManage = field.value === "manage";
|
||||
const isView = field.value === "view";
|
||||
const isHidden = field.value === "hidden";
|
||||
|
||||
let hiddenDisabled = false;
|
||||
if (field.name === "accessLists") {
|
||||
hiddenDisabled = form.values.proxyHosts !== "hidden";
|
||||
}
|
||||
if (field.name === "certificates") {
|
||||
hiddenDisabled =
|
||||
form.values.proxyHosts !== "hidden" ||
|
||||
form.values.redirectionHosts !== "hidden" ||
|
||||
form.values.deadHosts !== "hidden" ||
|
||||
form.values.streams !== "hidden";
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className="btn-group w-100" role="group">
|
||||
@@ -63,7 +93,7 @@ const PermissionsModal = EasyModal.create(({ id, visible, remove }: Props) => {
|
||||
autoComplete="off"
|
||||
value="manage"
|
||||
checked={field.value === "manage"}
|
||||
onChange={() => form.setFieldValue(field.name, "manage")}
|
||||
onChange={() => handleChange(form, field, "manage")}
|
||||
/>
|
||||
<label htmlFor={`${field.name}-manage`} className={getClasses(isManage)}>
|
||||
<T id="permissions.manage" />
|
||||
@@ -76,7 +106,7 @@ const PermissionsModal = EasyModal.create(({ id, visible, remove }: Props) => {
|
||||
autoComplete="off"
|
||||
value="view"
|
||||
checked={field.value === "view"}
|
||||
onChange={() => form.setFieldValue(field.name, "view")}
|
||||
onChange={() => handleChange(form, field, "view")}
|
||||
/>
|
||||
<label htmlFor={`${field.name}-view`} className={getClasses(isView)}>
|
||||
<T id="permissions.view" />
|
||||
@@ -89,7 +119,8 @@ const PermissionsModal = EasyModal.create(({ id, visible, remove }: Props) => {
|
||||
autoComplete="off"
|
||||
value="hidden"
|
||||
checked={field.value === "hidden"}
|
||||
onChange={() => form.setFieldValue(field.name, "hidden")}
|
||||
disabled={hiddenDisabled}
|
||||
onChange={() => handleChange(form, field, "hidden")}
|
||||
/>
|
||||
<label htmlFor={`${field.name}-hidden`} className={getClasses(isHidden)}>
|
||||
<T id="permissions.hidden" />
|
||||
|
||||
@@ -9,14 +9,16 @@ import {
|
||||
AccessField,
|
||||
Button,
|
||||
DomainNamesField,
|
||||
HasPermission,
|
||||
Loading,
|
||||
LocationsFields,
|
||||
NginxConfigField,
|
||||
SSLCertificateField,
|
||||
SSLOptionsFields,
|
||||
} from "src/components";
|
||||
import { useProxyHost, useSetProxyHost } from "src/hooks";
|
||||
import { useProxyHost, useSetProxyHost, useUser } from "src/hooks";
|
||||
import { T } from "src/locale";
|
||||
import { MANAGE, PROXY_HOSTS } from "src/modules/Permissions";
|
||||
import { validateNumber, validateString } from "src/modules/Validations";
|
||||
import { showObjectSuccess } from "src/notifications";
|
||||
|
||||
@@ -28,6 +30,7 @@ interface Props extends InnerModalProps {
|
||||
id: number | "new";
|
||||
}
|
||||
const ProxyHostModal = EasyModal.create(({ id, visible, remove }: Props) => {
|
||||
const { data: currentUser, isLoading: userIsLoading, error: userError } = useUser("me");
|
||||
const { data, isLoading, error } = useProxyHost(id);
|
||||
const { mutate: setProxyHost } = useSetProxyHost();
|
||||
const [errorMsg, setErrorMsg] = useState<ReactNode | null>(null);
|
||||
@@ -58,13 +61,13 @@ const ProxyHostModal = EasyModal.create(({ id, visible, remove }: Props) => {
|
||||
|
||||
return (
|
||||
<Modal show={visible} onHide={remove}>
|
||||
{!isLoading && error && (
|
||||
{!isLoading && (error || userError) && (
|
||||
<Alert variant="danger" className="m-3">
|
||||
{error?.message || "Unknown error"}
|
||||
{error?.message || userError?.message || "Unknown error"}
|
||||
</Alert>
|
||||
)}
|
||||
{isLoading && <Loading noLogo />}
|
||||
{!isLoading && data && (
|
||||
{isLoading || (userIsLoading && <Loading noLogo />)}
|
||||
{!isLoading && !userIsLoading && data && currentUser && (
|
||||
<Formik
|
||||
initialValues={
|
||||
{
|
||||
@@ -349,16 +352,18 @@ const ProxyHostModal = EasyModal.create(({ id, visible, remove }: Props) => {
|
||||
<Button data-bs-dismiss="modal" onClick={remove} disabled={isSubmitting}>
|
||||
<T id="cancel" />
|
||||
</Button>
|
||||
<Button
|
||||
type="submit"
|
||||
actionType="primary"
|
||||
className="ms-auto bg-lime"
|
||||
data-bs-dismiss="modal"
|
||||
isLoading={isSubmitting}
|
||||
disabled={isSubmitting}
|
||||
>
|
||||
<T id="save" />
|
||||
</Button>
|
||||
<HasPermission section={PROXY_HOSTS} permission={MANAGE} hideError>
|
||||
<Button
|
||||
type="submit"
|
||||
actionType="primary"
|
||||
className="ms-auto bg-lime"
|
||||
data-bs-dismiss="modal"
|
||||
isLoading={isSubmitting}
|
||||
disabled={isSubmitting}
|
||||
>
|
||||
<T id="save" />
|
||||
</Button>
|
||||
</HasPermission>
|
||||
</Modal.Footer>
|
||||
</Form>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user