problem
The web console fails to load entirely for any role denied one non-essential bootstrap read. GetInfo runs several independent calls under a single shared Promise and wires several to the same reject, including listLdapConfigurations, which only sets a flag. When a role denies it the 432 rejects the shared promise before listApis can resolve it (a race the small query usually wins), so GetInfo rejects and the router guard logs the user out instead of building routes. The tolerant pattern sits right beside it: listNetworkServiceProviders swallows its own error and the console still loads (listGuiThemes likewise).
Expected: a denied non-essential read degrades like listNetworkServiceProviders/listGuiThemes. Actual: blank console, redirect to /user/login.
versions
4.22 and current main. Client-side UI only; hypervisor/storage/network irrelevant.
The steps to reproduce the bug
- Create a custom role (e.g. from the DomainAdmin base type) that denies
listLdapConfigurations.
- Assign an account to it.
- Log in to the web UI — the console never renders and you are redirected to login.
What to do about it?
Give listLdapConfigurations (and any non-essential bootstrap read) its own .catch that defaults the flag, as listNetworkServiceProviders already does. The underlying hazard is the shared resolve/reject across independent calls in GetInfo; reserve reject for genuinely essential calls such as listApis.
problem
The web console fails to load entirely for any role denied one non-essential bootstrap read.
GetInforuns several independent calls under a single sharedPromiseand wires several to the samereject, includinglistLdapConfigurations, which only sets a flag. When a role denies it the 432 rejects the shared promise beforelistApiscan resolve it (a race the small query usually wins), soGetInforejects and the router guard logs the user out instead of building routes. The tolerant pattern sits right beside it:listNetworkServiceProvidersswallows its own error and the console still loads (listGuiThemeslikewise).Expected: a denied non-essential read degrades like
listNetworkServiceProviders/listGuiThemes. Actual: blank console, redirect to/user/login.versions
4.22 and current
main. Client-side UI only; hypervisor/storage/network irrelevant.The steps to reproduce the bug
listLdapConfigurations.What to do about it?
Give
listLdapConfigurations(and any non-essential bootstrap read) its own.catchthat defaults the flag, aslistNetworkServiceProvidersalready does. The underlying hazard is the sharedresolve/rejectacross independent calls inGetInfo; reserverejectfor genuinely essential calls such aslistApis.