feat: complete current GoChat updates

This commit is contained in:
2026-09-13 00:13:55 +08:00
parent 6e62f5094f
commit 0dd188c46f
58 changed files with 2662 additions and 1503 deletions
@@ -5,12 +5,12 @@ import {
} from './permissionsHelper';
import {
ROLES,
CONVERSATION_PERMISSIONS,
CONTACT_PERMISSIONS,
REPORTS_PERMISSIONS,
PORTAL_PERMISSIONS,
} from 'dashboard/constants/permissions.js';
import { isSuperAdminUser } from '../routes/dashboard/settings/captain/utils';
export const routeIsAccessibleFor = (route, userPermissions = []) => {
const { meta: { permissions: routePermissions = [] } = {} } = route;
@@ -22,7 +22,7 @@ export const defaultRedirectPage = (to, permissions) => {
const permissionRoutes = [
{
permissions: [...ROLES, ...CONVERSATION_PERMISSIONS],
permissions: CONVERSATION_PERMISSIONS,
path: 'dashboard',
},
{ permissions: [CONTACT_PERMISSIONS], path: 'contacts' },
@@ -34,7 +34,11 @@ export const defaultRedirectPage = (to, permissions) => {
hasPermissions(routePermissions, permissions)
);
return `accounts/${accountId}/${route ? route.path : 'dashboard'}`;
if (route) return `accounts/${accountId}/${route.path}`;
if (permissions.includes('custom_role')) {
return `accounts/${accountId}/profile/settings`;
}
return `accounts/${accountId}/dashboard`;
};
const validateActiveAccountRoutes = (to, user) => {
@@ -48,6 +52,10 @@ const validateActiveAccountRoutes = (to, user) => {
const userPermissions = getUserPermissions(user, to.params.accountId);
if (to.meta?.isSuperAdmin && !isSuperAdminUser(user)) {
return defaultRedirectPage(to, userPermissions);
}
const isAccessible = routeIsAccessibleFor(to, userPermissions);
// If the route is not accessible for the user, return to dashboard screen
return isAccessible ? null : defaultRedirectPage(to, userPermissions);
@@ -55,9 +55,11 @@ describe('#defaultRedirectPage', () => {
expect(defaultRedirectPage(to, permissions)).toBe('accounts/2/portals');
});
it('should return dashboard route as default for users with custom roles', () => {
it('should return the profile route for zero-permission custom roles', () => {
const permissions = ['custom_role'];
expect(defaultRedirectPage(to, permissions)).toBe('accounts/2/dashboard');
expect(defaultRedirectPage(to, permissions)).toBe(
'accounts/2/profile/settings'
);
});
it('should return dashboard route for users with administrator role', () => {
@@ -138,6 +140,28 @@ describe('#validateLoggedInRoutes', () => {
)
).toEqual(`accounts/1/dashboard`);
});
it('redirects non-super-admin users from super-admin routes', () => {
expect(
validateLoggedInRoutes(
{
name: 'super_admin_dashboard',
params: { accountId: 1 },
meta: { isSuperAdmin: true, permissions: ['agent'] },
},
{
accounts: [
{
id: 1,
role: 'agent',
permissions: ['agent'],
status: 'active',
},
],
}
)
).toEqual(`accounts/1/dashboard`);
});
});
describe('when route is suspended route', () => {
it('returns dashboard url', () => {