Update v1.2.0-beta - Dynamic context menu & permissions
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
✨ New Features: - Dynamic permission-based context menus for files and folders - Support for collaborative folder access control - Upload to specific folders including shared folders - Changelog modal for version updates - Improved dark mode synchronization 🐛 Bug Fixes: - Fixed context menu displaying incorrect options - Fixed CSS !important override preventing dynamic menu behavior - Fixed folder collaboration permission checks - Fixed breadcrumb navigation with empty segments - Fixed "Premature close" error loop in attachments - Fixed missing user variable in admin routes - Fixed avatar loading COEP policy issues 🔒 Security: - Added security middleware (CSRF, rate limiting, input validation) - Fixed collaboration folder access validation - Improved shared folder permission handling 🎨 UI/UX Improvements: - Removed Actions column from folder view - Context menu now properly hides/shows based on permissions - Better visual feedback for collaborative folders - Improved upload flow with inline modals 🧹 Code Quality: - Added collaboration data to folder routes - Refactored context menu logic for better maintainability - Added debug logging for troubleshooting - Improved file upload handling with chunking support
This commit is contained in:
@@ -31,10 +31,43 @@ router.post('/', (req, res) => {
|
||||
}
|
||||
|
||||
const file = files.file[0];
|
||||
const userDir = path.join(process.cwd(), 'cdn-files', req.user.name);
|
||||
const targetFolder = fields.targetFolder ? fields.targetFolder[0] : '';
|
||||
const isSharedFolder = fields.isSharedFolder ? fields.isSharedFolder[0] === 'true' : false;
|
||||
const ownerName = fields.ownerName ? fields.ownerName[0] : '';
|
||||
|
||||
// Construction du chemin cible avec le dossier spécifié
|
||||
let userName = req.user.name;
|
||||
|
||||
// Si c'est un dossier partagé, utiliser le nom du propriétaire
|
||||
if (isSharedFolder && ownerName) {
|
||||
// Vérifier les permissions de collaboration
|
||||
const collaborationFilePath = path.join(__dirname, '../../../data', 'collaboration.json');
|
||||
try {
|
||||
const collaborationData = JSON.parse(await fs.promises.readFile(collaborationFilePath, 'utf8'));
|
||||
const itemId = `folder-${targetFolder}`;
|
||||
const folderInfo = collaborationData.activeFiles[itemId];
|
||||
|
||||
// Vérifier si l'utilisateur a accès au dossier partagé
|
||||
if (!folderInfo || !folderInfo.isCollaborative ||
|
||||
!folderInfo.activeUsers.some(u => u.id === req.user.id)) {
|
||||
return res.status(403).send('Accès refusé au dossier partagé');
|
||||
}
|
||||
|
||||
userName = ownerName;
|
||||
} catch (error) {
|
||||
console.error('Error checking collaboration permissions:', error);
|
||||
return res.status(500).send('Erreur lors de la vérification des permissions');
|
||||
}
|
||||
}
|
||||
|
||||
let userDir = path.join(process.cwd(), 'cdn-files', userName);
|
||||
if (targetFolder) {
|
||||
userDir = path.join(userDir, targetFolder);
|
||||
}
|
||||
|
||||
const filename = fields.filename ? fields.filename[0] : file.originalFilename;
|
||||
const filePath = path.join(userDir, filename);
|
||||
|
||||
|
||||
// Récupérer les champs supplémentaires
|
||||
const expiryDate = fields.expiryDate ? fields.expiryDate[0] : '';
|
||||
const password = fields.password ? fields.password[0] : '';
|
||||
|
||||
Reference in New Issue
Block a user