export function applyUserRoleUI(user, refs) {
const { usernameDisplay, roleBadge } = refs;
if (!user || !usernameDisplay || !roleBadge) return;
usernameDisplay.textContent = user.username || "unknown";
const roleBadges = {
admin: 'Admin',
operator: 'Operator',
viewer: 'Viewer',
};
if (roleBadges[user.role]) {
roleBadge.innerHTML = roleBadges[user.role];
} else {
roleBadge.textContent = user.role || "user";
}
roleBadge.classList.remove(
"bg-purple-900/50",
"text-purple-300",
"border",
"border-purple-800",
"bg-blue-900/50",
"text-blue-300",
"border-blue-800",
"bg-slate-700",
"text-slate-300",
"border-slate-600",
);
if (user.role === "admin") {
roleBadge.classList.add(
"bg-purple-900/50",
"text-purple-300",
"border",
"border-purple-800",
);
} else if (user.role === "operator") {
roleBadge.classList.add(
"bg-blue-900/50",
"text-blue-300",
"border",
"border-blue-800",
);
} else {
roleBadge.classList.add(
"bg-slate-700",
"text-slate-300",
"border",
"border-slate-600",
);
}
const permissions = new Set(Array.isArray(user.permissions) ? user.permissions : []);
const can = (permission) => permissions.has(permission);
const canAny = (...items) => items.some((permission) => can(permission));
// Helper: unhide an element by ID in both topbar and sidebar
const unhide = (id) => {
const el = document.getElementById(id);
if (el) el.classList.remove("hidden");
};
if (can("users:manage")) unhide("users-link");
if (can("plugins:manage")) unhide("plugins-link");
if (can("audit:view")) unhide("logs-link");
if (can("system:configure")) unhide("sol-publish-link");
if (can("clients:build") || user.canBuild) unhide("build-link");
if (can("clients:enroll")) unhide("enrollment-link");
if (can("scripts:manage")) unhide("scripts-link");
if (can("deploys:manage")) unhide("deploy-link");
if (canAny("system:notifications", "clients:control", "clients:enroll")) {
unhide("notifications-link");
}
if (user.role !== "viewer" || user.canUploadFiles) {
unhide("file-share-link");
}
}
export async function applyThumbnailWallVisibility(user) {
if (!user || user.role === "viewer") return;
try {
const res = await fetch("/api/settings/thumbnails", { credentials: "include" });
if (!res.ok) return;
const data = await res.json();
if (data?.thumbnails?.wallEnabled === false) return;
document.querySelectorAll("#screenshots-link").forEach((el) => el.classList.remove("hidden"));
} catch {}
}