fixed the bug of Sodistore Home Product not show on side bar and added related backend logs and more accurate frontend error messages

This commit is contained in:
Yinyin Liu 2026-02-03 13:52:20 +01:00
parent d73a85c38d
commit 617ab2f782
4 changed files with 80 additions and 14 deletions

View File

@ -596,6 +596,13 @@ public class Controller : ControllerBase
var folder = Db.GetFolderById(folderAccess.FolderId);
var user = Db.GetUserById(folderAccess.UserId);
// Check if user already has access - treat as idempotent (success)
if (user is not null && folder is not null && user.HasAccessTo(folder))
{
Console.WriteLine($"GrantUserAccessToFolder: User {user.Id} ({user.Name}) already has access to folder {folder.Id} ({folder.Name}) - returning success");
return Ok();
}
return session.GrantUserAccessTo(user, folder)
? Ok()
: Unauthorized();
@ -626,6 +633,13 @@ public class Controller : ControllerBase
var installation = Db.GetInstallationById(installationAccess.InstallationId);
var user = Db.GetUserById(installationAccess.UserId);
// Check if user already has access - treat as idempotent (success)
if (user is not null && installation is not null && user.HasAccessTo(installation))
{
Console.WriteLine($"GrantUserAccessToInstallation: User {user.Id} ({user.Name}) already has access to installation {installation.Id} ({installation.Name}) - returning success");
return Ok();
}
return session.GrantUserAccessTo(user, installation)
? Ok()
: Unauthorized();

View File

@ -405,13 +405,53 @@ public static class SessionMethods
{
var sessionUser = session?.User;
return sessionUser is not null
&& folder is not null
&& user is not null
&& user.IsDescendantOf(sessionUser)
&& sessionUser.HasAccessTo(folder)
&& !user.HasAccessTo(folder)
&& Db.Create(new FolderAccess { UserId = user.Id, FolderId = folder.Id });
if (sessionUser is null)
{
Console.WriteLine($"GrantUserAccessToFolder failed: sessionUser is null");
return false;
}
if (folder is null)
{
Console.WriteLine($"GrantUserAccessToFolder failed: folder is null");
return false;
}
if (user is null)
{
Console.WriteLine($"GrantUserAccessToFolder failed: user is null");
return false;
}
if (!user.IsDescendantOf(sessionUser))
{
Console.WriteLine($"GrantUserAccessToFolder failed: User {user.Id} ({user.Name}) is not a descendant of sessionUser {sessionUser.Id} ({sessionUser.Name})");
return false;
}
if (!sessionUser.HasAccessTo(folder))
{
Console.WriteLine($"GrantUserAccessToFolder failed: SessionUser {sessionUser.Id} ({sessionUser.Name}) does not have access to folder {folder.Id} ({folder.Name})");
return false;
}
if (user.HasAccessTo(folder))
{
Console.WriteLine($"GrantUserAccessToFolder failed: User {user.Id} ({user.Name}) already has access to folder {folder.Id} ({folder.Name})");
return false;
}
var created = Db.Create(new FolderAccess { UserId = user.Id, FolderId = folder.Id });
if (!created)
{
Console.WriteLine($"GrantUserAccessToFolder failed: Failed to create FolderAccess record for User {user.Id} and Folder {folder.Id}");
}
else
{
Console.WriteLine($"GrantUserAccessToFolder succeeded: Granted User {user.Id} ({user.Name}) access to Folder {folder.Id} ({folder.Name})");
}
return created;
}
public static Boolean RevokeUserAccessTo(this Session? session, User? user, Installation? installation)

View File

@ -76,7 +76,7 @@ function App() {
setUser(response.data.user);
setAccessToSalimax(response.data.accessToSalimax);
setAccessToSalidomo(response.data.accessToSalidomo);
setAccessToSodiohome(response.data.accessToSodiohome);
setAccessToSodiohome(response.data.accessToSodioHome);
setAccessToSodistore(response.data.accessToSodistoreMax);
if (response.data.accessToSalimax) {
navigate(routes.installations);

View File

@ -172,7 +172,13 @@ function UserAccess(props: UserAccessProps) {
}
})
.catch((err) => {
if (err.response && err.response.status === 401) {
setErrorMessage(
`User ${props.current_user.name} already has access to folder "${folder.name}" or you don't have permission to grant this access`
);
} else {
setErrorMessage('An error has occured');
}
setError(true);
});
}
@ -195,7 +201,13 @@ function UserAccess(props: UserAccessProps) {
}
})
.catch((err) => {
if (err.response && err.response.status === 401) {
setErrorMessage(
`User ${props.current_user.name} already has access to installation "${installation.name}" or you don't have permission to grant this access`
);
} else {
setErrorMessage('An error has occured');
}
setError(true);
});
}