Secure Cloud File Permission Manager

Secure Cloud File Permission Manager

File Permissions Overview

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(); });
Scroll to Top