Update permissions on the frontend

This commit is contained in:
Pranav
2024-05-23 12:12:07 -07:00
parent 3a90653d12
commit 4897bfd2ef
9 changed files with 116 additions and 90 deletions
@@ -1,13 +1,20 @@
/* eslint arrow-body-style: 0 */
import { ACCOUNT_PERMISSIONS } from '../../../constants/permissions';
import { frontendURL } from '../../../helper/URLHelper';
const ConversationView = () => import('./ConversationView');
const GENERIC_CONVERSATION_PERMISSIONS = [
ACCOUNT_PERMISSIONS.CONVERSATION_MANAGE,
ACCOUNT_PERMISSIONS.CONVERSATION_PARTICIPATING_MANAGE,
ACCOUNT_PERMISSIONS.CONVERSATION_UNASSIGNED_MANAGE,
];
export default {
routes: [
{
path: frontendURL('accounts/:accountId/dashboard'),
name: 'home',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: () => {
return { inboxId: 0 };
@@ -16,7 +23,7 @@ export default {
{
path: frontendURL('accounts/:accountId/conversations/:conversation_id'),
name: 'inbox_conversation',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: route => {
return { inboxId: 0, conversationId: route.params.conversation_id };
@@ -25,7 +32,7 @@ export default {
{
path: frontendURL('accounts/:accountId/inbox/:inbox_id'),
name: 'inbox_dashboard',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: route => {
return { inboxId: route.params.inbox_id };
@@ -36,7 +43,7 @@ export default {
'accounts/:accountId/inbox/:inbox_id/conversations/:conversation_id'
),
name: 'conversation_through_inbox',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: route => {
return {
@@ -48,7 +55,7 @@ export default {
{
path: frontendURL('accounts/:accountId/label/:label'),
name: 'label_conversations',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: route => ({ label: route.params.label }),
},
@@ -57,7 +64,7 @@ export default {
'accounts/:accountId/label/:label/conversations/:conversation_id'
),
name: 'conversations_through_label',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: route => ({
conversationId: route.params.conversation_id,
@@ -67,7 +74,7 @@ export default {
{
path: frontendURL('accounts/:accountId/team/:teamId'),
name: 'team_conversations',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: route => ({ teamId: route.params.teamId }),
},
@@ -76,7 +83,7 @@ export default {
'accounts/:accountId/team/:teamId/conversations/:conversationId'
),
name: 'conversations_through_team',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: route => ({
conversationId: route.params.conversationId,
@@ -86,7 +93,7 @@ export default {
{
path: frontendURL('accounts/:accountId/custom_view/:id'),
name: 'folder_conversations',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: route => ({ foldersId: route.params.id }),
},
@@ -95,7 +102,7 @@ export default {
'accounts/:accountId/custom_view/:id/conversations/:conversation_id'
),
name: 'conversations_through_folders',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: route => ({
conversationId: route.params.conversation_id,
@@ -105,7 +112,7 @@ export default {
{
path: frontendURL('accounts/:accountId/mentions/conversations'),
name: 'conversation_mentions',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: () => ({ conversationType: 'mention' }),
},
@@ -114,7 +121,7 @@ export default {
'accounts/:accountId/mentions/conversations/:conversationId'
),
name: 'conversation_through_mentions',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: route => ({
conversationId: route.params.conversationId,
@@ -124,7 +131,7 @@ export default {
{
path: frontendURL('accounts/:accountId/unattended/conversations'),
name: 'conversation_unattended',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: () => ({ conversationType: 'unattended' }),
},
@@ -133,7 +140,7 @@ export default {
'accounts/:accountId/unattended/conversations/:conversationId'
),
name: 'conversation_through_unattended',
roles: ['administrator', 'agent'],
meta: { permissions: GENERIC_CONVERSATION_PERMISSIONS },
component: ConversationView,
props: route => ({
conversationId: route.params.conversationId,
@@ -143,8 +150,13 @@ export default {
{
path: frontendURL('accounts/:accountId/participating/conversations'),
name: 'conversation_participating',
roles: ['administrator', 'agent'],
component: ConversationView,
meta: {
permissions: [
ACCOUNT_PERMISSIONS.CONVERSATION_MANAGE,
ACCOUNT_PERMISSIONS.CONVERSATION_PARTICIPATING_MANAGE,
],
},
props: () => ({ conversationType: 'participating' }),
},
{
@@ -152,8 +164,13 @@ export default {
'accounts/:accountId/participating/conversations/:conversationId'
),
name: 'conversation_through_participating',
roles: ['administrator', 'agent'],
component: ConversationView,
meta: {
permissions: [
ACCOUNT_PERMISSIONS.CONVERSATION_MANAGE,
ACCOUNT_PERMISSIONS.CONVERSATION_PARTICIPATING_MANAGE,
],
},
props: route => ({
conversationId: route.params.conversationId,
conversationType: 'participating',
+1 -28
View File
@@ -8,29 +8,6 @@ import AnalyticsHelper from '../helper/AnalyticsHelper';
const routes = [...dashboard.routes];
window.roleWiseRoutes = {
agent: [],
administrator: [],
};
// generateRoleWiseRoute - updates window object with agent/admin route
const generateRoleWiseRoute = route => {
route.forEach(element => {
if (element.children) {
generateRoleWiseRoute(element.children);
}
if (element.roles) {
element.roles.forEach(roleEl => {
window.roleWiseRoutes[roleEl].push(element.name);
});
}
});
};
// Create a object of routes
// accessible by each role.
// returns an object with roles as keys and routeArr as values
generateRoleWiseRoute(routes);
export const router = new VueRouter({ mode: 'history', routes });
export const validateAuthenticateRoutePermission = (to, next, { getters }) => {
@@ -45,11 +22,7 @@ export const validateAuthenticateRoutePermission = (to, next, { getters }) => {
return next(frontendURL(`accounts/${user.account_id}/dashboard`));
}
const nextRoute = validateLoggedInRoutes(
to,
getters.getCurrentUser,
window.roleWiseRoutes
);
const nextRoute = validateLoggedInRoutes(to, getters.getCurrentUser);
return nextRoute ? next(frontendURL(nextRoute)) : next();
};