mirror of
https://github.com/netbirdio/netbird.git
synced 2026-08-24 16:41:30 +02:00
33 lines
1.3 KiB
TypeScript
33 lines
1.3 KiB
TypeScript
import { useEffect, useState } from "react";
|
|
import { Settings as SettingsSvc } from "@bindings/services";
|
|
import { Privilege } from "@bindings/services/models.js";
|
|
|
|
// usePrivilege reports whether this UI process may perform the changes the daemon
|
|
// restricts to root/administrator. It is answered in-process from our own token
|
|
// with the daemon's own rule, so there is no round-trip and it works while the
|
|
// daemon is down.
|
|
//
|
|
// null means "not known yet", which includes the read having failed. Callers must
|
|
// treat that as "do not restrict": the daemon enforces this regardless, so the
|
|
// only thing a wrong guess here costs is a control that looks unavailable when it
|
|
// is not, or a save that fails with the daemon's own guidance.
|
|
export const usePrivilege = (): Privilege | null => {
|
|
const [privilege, setPrivilege] = useState<Privilege | null>(null);
|
|
|
|
useEffect(() => {
|
|
let cancelled = false;
|
|
SettingsSvc.Privilege()
|
|
.then((p) => {
|
|
if (!cancelled) setPrivilege(p);
|
|
})
|
|
.catch((e: unknown) => {
|
|
console.warn("[usePrivilege] read failed, not restricting controls", e);
|
|
});
|
|
return () => {
|
|
cancelled = true;
|
|
};
|
|
}, []);
|
|
|
|
return privilege;
|
|
};
|