Secure Cloud File Permission Manager
File Permissions Overview
Manage Files
Manage Users
No files found. Add files in the Data Configuration tab.
`; return; } files.forEach(file => { const fileCard = document.createElement('div'); fileCard.className = 'bg-gray-50 p-4 rounded-lg border'; let userPermissionsHtml = users.map(user => { const currentPermission = file.permissions[user.id] || 'No Access'; return `
${user.name}
`;
}).join('');
fileCard.innerHTML = `
${file.name}
${userPermissionsHtml}
`;
dashboardList.appendChild(fileCard);
});
};
const renderConfigLists = () => {
// Render Files
fileListDisplay.innerHTML = '';
files.forEach(file => {
const el = document.createElement('div');
el.className = 'bg-gray-100 p-2 rounded-md flex justify-between items-center text-sm';
el.innerHTML = `${file.name}`;
fileListDisplay.appendChild(el);
});
// Render Users
userListDisplay.innerHTML = '';
users.forEach(user => {
const el = document.createElement('div');
el.className = 'bg-gray-100 p-2 rounded-md flex justify-between items-center text-sm';
el.innerHTML = `${user.name}`;
userListDisplay.appendChild(el);
});
};
const handlePermissionChange = (e) => {
const select = e.target;
const fileId = parseInt(select.dataset.fileId);
const userId = parseInt(select.dataset.userId);
const newPermission = select.value;
const file = files.find(f => f.id === fileId);
if (file) {
if (newPermission === 'No Access') {
delete file.permissions[userId];
} else {
file.permissions[userId] = newPermission;
}
}
};
const handlePdfDownload = () => {
if (files.length === 0) {
alert("No data to export.");
return;
}
const { jsPDF } = window.jspdf;
const pdf = new jsPDF();
const tableData = [];
files.forEach(file => {
users.forEach(user => {
const permission = file.permissions[user.id] || 'No Access';
tableData.push([file.name, user.name, permission]);
});
});
pdf.setFontSize(18);
pdf.text("File Permissions Report", 105, 20, { align: 'center' });
pdf.autoTable({
head: [['File Name', 'User', 'Permission Level']],
body: tableData,
startY: 30,
theme: 'striped',
headStyles: { fillColor: [59, 130, 246] }, // blue-500
});
pdf.save('file-permissions-report.pdf');
};
// --- Event Listeners ---
tabs.dashboard.addEventListener('click', () => { currentTab = 'dashboard'; updateTabs(); });
tabs.config.addEventListener('click', () => { currentTab = 'config'; updateTabs(); });
navButtons.next.addEventListener('click', () => { currentTab = 'config'; updateTabs(); });
navButtons.prev.addEventListener('click', () => { currentTab = 'dashboard'; updateTabs(); });
addFileForm.addEventListener('submit', (e) => {
e.preventDefault();
const name = newFileInput.value.trim();
if (name) {
files.push({ id: Date.now(), name, permissions: {} });
newFileInput.value = '';
renderDashboard();
renderConfigLists();
}
});
addUserForm.addEventListener('submit', (e) => {
e.preventDefault();
const name = newUserInput.value.trim();
if (name) {
users.push({ id: Date.now(), name });
newUserInput.value = '';
renderDashboard();
renderConfigLists();
}
});
fileListDisplay.addEventListener('click', (e) => {
if (e.target.classList.contains('delete-file-btn')) {
const id = parseInt(e.target.dataset.id);
files = files.filter(f => f.id !== id);
renderDashboard();
renderConfigLists();
}
});
userListDisplay.addEventListener('click', (e) => {
if (e.target.classList.contains('delete-user-btn')) {
const id = parseInt(e.target.dataset.id);
users = users.filter(u => u.id !== id);
// Also remove permissions for this user from all files
files.forEach(file => delete file.permissions[id]);
renderDashboard();
renderConfigLists();
}
});
dashboardList.addEventListener('change', (e) => {
if (e.target.classList.contains('permission-select')) {
handlePermissionChange(e);
}
});
downloadPdfBtn.addEventListener('click', handlePdfDownload);
// --- Initializations ---
updateTabs();
renderDashboard();
renderConfigLists();
});
