Adicionar web/admin/admin.js
This commit is contained in:
@@ -0,0 +1,70 @@
|
|||||||
|
async function loadUsers() {
|
||||||
|
const r = await fetch("/admin/users");
|
||||||
|
const users = await r.json();
|
||||||
|
|
||||||
|
const container = document.getElementById("users");
|
||||||
|
container.innerHTML = "";
|
||||||
|
|
||||||
|
users.forEach(u => {
|
||||||
|
const div = document.createElement("div");
|
||||||
|
div.className = "user-card";
|
||||||
|
div.innerHTML = `
|
||||||
|
<strong>${u.name}</strong> (${u.email}) — ${u.role}
|
||||||
|
<button onclick="selectUser('${u.email}')">Manage</button>
|
||||||
|
`;
|
||||||
|
container.appendChild(div);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function selectUser(email) {
|
||||||
|
const r = await fetch(`/admin/conversations/${email}`);
|
||||||
|
const convs = await r.json();
|
||||||
|
|
||||||
|
const details = document.getElementById("user-details");
|
||||||
|
details.innerHTML = `
|
||||||
|
<h3>${email}</h3>
|
||||||
|
<button onclick="promote('${email}')">Promote to Admin</button>
|
||||||
|
<h4>Conversations</h4>
|
||||||
|
<ul>${convs.map(c => `<li>${c.title}</li>`).join("")}</ul>
|
||||||
|
<h4>ACL</h4>
|
||||||
|
<div id="acl"></div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
loadACL(email);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function loadACL(email) {
|
||||||
|
const r = await fetch("/admin/users");
|
||||||
|
const users = await r.json();
|
||||||
|
const u = users.find(x => x.email === email);
|
||||||
|
|
||||||
|
const aclDiv = document.getElementById("acl");
|
||||||
|
aclDiv.innerHTML = `
|
||||||
|
${Object.keys(u).map(key => {
|
||||||
|
if (typeof u[key] === "boolean") {
|
||||||
|
return `
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" onchange="updateACL('${email}', '${key}', this.checked)" ${u[key] ? "checked" : ""}>
|
||||||
|
${key}
|
||||||
|
</label><br>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}).join("")}
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function updateACL(email, key, value) {
|
||||||
|
await fetch(`/admin/update_acl/${email}`, {
|
||||||
|
method: "POST",
|
||||||
|
headers: {"Content-Type": "application/json"},
|
||||||
|
body: JSON.stringify({[key]: value})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function promote(email) {
|
||||||
|
await fetch(`/admin/promote/${email}`, {method: "POST"});
|
||||||
|
loadUsers();
|
||||||
|
}
|
||||||
|
|
||||||
|
window.onload = loadUsers;
|
||||||
Reference in New Issue
Block a user