From bfcb6dcead1315c555ced6746051c438afbf9bad Mon Sep 17 00:00:00 2001 From: Mohab Date: Fri, 4 Sep 2026 03:14:28 +0300 Subject: [PATCH 1/8] fix: allow members to upload files --- src/Analysim.Web/Controllers/ProjectController.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Analysim.Web/Controllers/ProjectController.cs b/src/Analysim.Web/Controllers/ProjectController.cs index 010e350c..7490cca2 100644 --- a/src/Analysim.Web/Controllers/ProjectController.cs +++ b/src/Analysim.Web/Controllers/ProjectController.cs @@ -2258,13 +2258,16 @@ public async Task UploadFile([FromForm] ProjectFileUploadVM formd var user = await _dbContext.Users.SingleOrDefaultAsync(u => u.Id == userId); if (user == null) return NotFound(new { message = "User Not Found" }); - bool isOwner = await _dbContext.Projects + bool hasUploadAccess = await _dbContext.Projects .AnyAsync(p => p.ProjectUsers.Any(aup => - aup.User.Id == user.Id && - aup.Project.ProjectID == formdata.ProjectID && - aup.UserRole == "owner")); + aup.UserID == user.Id && + aup.ProjectID == formdata.ProjectID && + (aup.UserRole == "owner" || aup.UserRole == "member"))); - if (!isOwner) return Unauthorized(new { message = "You are not the owner of the project" }); + if (!hasUploadAccess) + { + return StatusCode(StatusCodes.Status403Forbidden, new { message = "You must be an owner or member of the project" }); + } if (formdata.Directory == null) { formdata.Directory = ""; } From 6253d77fbd379c3fc249452be738146ae6eb5921 Mon Sep 17 00:00:00 2001 From: Mohab Date: Fri, 4 Sep 2026 03:16:12 +0300 Subject: [PATCH 2/8] fix: allow member folder creation --- .../Controllers/ProjectController.cs | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/Analysim.Web/Controllers/ProjectController.cs b/src/Analysim.Web/Controllers/ProjectController.cs index 7490cca2..bad7a326 100644 --- a/src/Analysim.Web/Controllers/ProjectController.cs +++ b/src/Analysim.Web/Controllers/ProjectController.cs @@ -2694,13 +2694,16 @@ public async Task CreateFolder([FromForm] FolderUploadProfileView var user = await _dbContext.Users.SingleOrDefaultAsync(u => u.Id == userId); if (user == null) return NotFound(new { message = "User Not Found" }); - bool isOwner = await _dbContext.Projects + bool hasFolderAccess = await _dbContext.Projects .AnyAsync(p => p.ProjectUsers.Any(aup => - aup.User.Id == user.Id && - aup.Project.ProjectID == formdata.ProjectID && - aup.UserRole == "owner")); + aup.UserID == user.Id && + aup.ProjectID == formdata.ProjectID && + (aup.UserRole == "owner" || aup.UserRole == "member"))); - if (!isOwner) return Unauthorized(new { message = "You are not the owner of the project" }); + if (!hasFolderAccess) + { + return StatusCode(StatusCodes.Status403Forbidden, new { message = "You must be an owner or member of the project" }); + } if (formdata.Directory == null) { formdata.Directory = ""; } @@ -2766,13 +2769,16 @@ public async Task CreateNotebookFolder([FromForm] FolderUploadPro var user = await _dbContext.Users.SingleOrDefaultAsync(u => u.Id == userId); if (user == null) return NotFound(new { message = "User Not Found" }); - bool isOwner = await _dbContext.Projects + bool hasFolderAccess = await _dbContext.Projects .AnyAsync(p => p.ProjectUsers.Any(aup => - aup.User.Id == user.Id && - aup.Project.ProjectID == formdata.ProjectID && - aup.UserRole == "owner")); + aup.UserID == user.Id && + aup.ProjectID == formdata.ProjectID && + (aup.UserRole == "owner" || aup.UserRole == "member"))); - if (!isOwner) return Unauthorized(new { message = "You are not the owner of the project" }); + if (!hasFolderAccess) + { + return StatusCode(StatusCodes.Status403Forbidden, new { message = "You must be an owner or member of the project" }); + } if (formdata.Directory == null) { formdata.Directory = ""; } From eba854f3f0ea46cfeee091d29ba7a9d73cf8ac5c Mon Sep 17 00:00:00 2001 From: Mohab Date: Fri, 4 Sep 2026 03:50:25 +0300 Subject: [PATCH 3/8] fix: use authenticated user ID when creating folders --- src/Analysim.Web/Controllers/ProjectController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Analysim.Web/Controllers/ProjectController.cs b/src/Analysim.Web/Controllers/ProjectController.cs index bad7a326..9f0f0598 100644 --- a/src/Analysim.Web/Controllers/ProjectController.cs +++ b/src/Analysim.Web/Controllers/ProjectController.cs @@ -2727,7 +2727,7 @@ public async Task CreateFolder([FromForm] FolderUploadProfileView Uri = "", DateCreated = DateTimeOffset.UtcNow, LastModified = DateTimeOffset.UtcNow, - UserID = formdata.UserID, + UserID = user.Id, ProjectID = formdata.ProjectID }; From f34ff2a2542c6f40a12a0681c600de75e569d789 Mon Sep 17 00:00:00 2001 From: Mohab Date: Fri, 4 Sep 2026 04:05:03 +0300 Subject: [PATCH 4/8] fix: project member list display --- .../ClientApp/src/app/application-pipes/custom.pipe.ts | 6 +++++- .../modal-member-list/modal-member-list.component.html | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Analysim.Web/ClientApp/src/app/application-pipes/custom.pipe.ts b/src/Analysim.Web/ClientApp/src/app/application-pipes/custom.pipe.ts index ba102a2a..51b6ac69 100644 --- a/src/Analysim.Web/ClientApp/src/app/application-pipes/custom.pipe.ts +++ b/src/Analysim.Web/ClientApp/src/app/application-pipes/custom.pipe.ts @@ -113,10 +113,14 @@ export class ProjectMemberPipe implements PipeTransform { return projectUsers.filter(x => { return x.userRole == "member" }) + case "allMembers": + return projectUsers.filter(x => { + return x.userRole == "owner" || x.userRole == "admin" || x.userRole == "member" + }) default: return projectUsers.filter(x => { return x.userRole == "member" || x.userRole == "admin" }) } } -} \ No newline at end of file +} diff --git a/src/Analysim.Web/ClientApp/src/app/projects/project/modal-member-list/modal-member-list.component.html b/src/Analysim.Web/ClientApp/src/app/projects/project/modal-member-list/modal-member-list.component.html index d6f25368..3f426608 100644 --- a/src/Analysim.Web/ClientApp/src/app/projects/project/modal-member-list/modal-member-list.component.html +++ b/src/Analysim.Web/ClientApp/src/app/projects/project/modal-member-list/modal-member-list.component.html @@ -10,7 +10,7 @@