chore: permissions
This commit is contained in:
@@ -98,9 +98,12 @@ export default {
|
||||
return getSidebarItems(this.accountId);
|
||||
},
|
||||
primaryMenuItems() {
|
||||
const permissions = this.currentUser.permissions;
|
||||
const menuItems = this.sideMenuConfig.primaryMenu;
|
||||
return menuItems.filter(menuItem => {
|
||||
const isAvailableForTheUser = menuItem.roles.includes(this.currentRole);
|
||||
const isAvailableForTheUser = permissions.some(permission =>
|
||||
menuItem.meta.permissions.includes(permission)
|
||||
);
|
||||
|
||||
if (!isAvailableForTheUser) {
|
||||
return false;
|
||||
|
||||
@@ -11,6 +11,9 @@ const campaigns = accountId => ({
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/campaigns/ongoing`),
|
||||
toStateName: 'ongoing_campaigns',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'oneOffCampaigns',
|
||||
@@ -19,6 +22,9 @@ const campaigns = accountId => ({
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/campaigns/one_off`),
|
||||
toStateName: 'one_off',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
@@ -14,6 +14,9 @@ const contacts = accountId => ({
|
||||
label: 'ALL_CONTACTS',
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/contacts`),
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'contacts_dashboard',
|
||||
},
|
||||
],
|
||||
|
||||
@@ -28,6 +28,9 @@ const conversations = accountId => ({
|
||||
key: 'conversations',
|
||||
toState: frontendURL(`accounts/${accountId}/dashboard`),
|
||||
toolTip: 'Conversation from all subscribed inboxes',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'home',
|
||||
},
|
||||
{
|
||||
@@ -35,6 +38,9 @@ const conversations = accountId => ({
|
||||
label: 'MENTIONED_CONVERSATIONS',
|
||||
key: 'conversation_mentions',
|
||||
toState: frontendURL(`accounts/${accountId}/mentions/conversations`),
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'conversation_mentions',
|
||||
},
|
||||
{
|
||||
@@ -42,6 +48,9 @@ const conversations = accountId => ({
|
||||
label: 'UNATTENDED_CONVERSATIONS',
|
||||
key: 'conversation_unattended',
|
||||
toState: frontendURL(`accounts/${accountId}/unattended/conversations`),
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'conversation_unattended',
|
||||
},
|
||||
],
|
||||
|
||||
@@ -9,7 +9,14 @@ const primaryMenuItems = accountId => [
|
||||
featureFlag: FEATURE_FLAGS.INBOX_VIEW,
|
||||
toState: frontendURL(`accounts/${accountId}/inbox-view`),
|
||||
toStateName: 'inbox_view',
|
||||
roles: ['administrator', 'agent'],
|
||||
meta: {
|
||||
permissions: [
|
||||
'account_manage',
|
||||
'conversation_manage',
|
||||
'conversation_participating_manage',
|
||||
'conversation_unassigned_manage',
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
icon: 'chat',
|
||||
@@ -17,7 +24,14 @@ const primaryMenuItems = accountId => [
|
||||
label: 'CONVERSATIONS',
|
||||
toState: frontendURL(`accounts/${accountId}/dashboard`),
|
||||
toStateName: 'home',
|
||||
roles: ['administrator', 'agent'],
|
||||
meta: {
|
||||
permissions: [
|
||||
'account_manage',
|
||||
'conversation_manage',
|
||||
'conversation_participating_manage',
|
||||
'conversation_unassigned_manage',
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
icon: 'book-contacts',
|
||||
@@ -26,7 +40,14 @@ const primaryMenuItems = accountId => [
|
||||
featureFlag: FEATURE_FLAGS.CRM,
|
||||
toState: frontendURL(`accounts/${accountId}/contacts`),
|
||||
toStateName: 'contacts_dashboard',
|
||||
roles: ['administrator', 'agent'],
|
||||
meta: {
|
||||
permissions: [
|
||||
'account_manage',
|
||||
'conversation_manage',
|
||||
'conversation_participating_manage',
|
||||
'conversation_unassigned_manage',
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
icon: 'arrow-trending-lines',
|
||||
@@ -35,7 +56,9 @@ const primaryMenuItems = accountId => [
|
||||
featureFlag: FEATURE_FLAGS.REPORTS,
|
||||
toState: frontendURL(`accounts/${accountId}/reports`),
|
||||
toStateName: 'settings_account_reports',
|
||||
roles: ['administrator'],
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
},
|
||||
{
|
||||
icon: 'megaphone',
|
||||
@@ -44,7 +67,9 @@ const primaryMenuItems = accountId => [
|
||||
featureFlag: FEATURE_FLAGS.CAMPAIGNS,
|
||||
toState: frontendURL(`accounts/${accountId}/campaigns`),
|
||||
toStateName: 'ongoing_campaigns',
|
||||
roles: ['administrator'],
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
},
|
||||
{
|
||||
icon: 'library',
|
||||
@@ -54,7 +79,9 @@ const primaryMenuItems = accountId => [
|
||||
alwaysVisibleOnChatwootInstances: true,
|
||||
toState: frontendURL(`accounts/${accountId}/portals`),
|
||||
toStateName: 'default_portal_articles',
|
||||
roles: ['administrator'],
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
},
|
||||
{
|
||||
icon: 'settings',
|
||||
@@ -62,7 +89,14 @@ const primaryMenuItems = accountId => [
|
||||
label: 'SETTINGS',
|
||||
toState: frontendURL(`accounts/${accountId}/settings`),
|
||||
toStateName: 'settings_home',
|
||||
roles: ['administrator', 'agent'],
|
||||
meta: {
|
||||
permissions: [
|
||||
'account_manage',
|
||||
'conversation_manage',
|
||||
'conversation_participating_manage',
|
||||
'conversation_unassigned_manage',
|
||||
],
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -20,6 +20,9 @@ const reports = accountId => ({
|
||||
label: 'REPORTS_OVERVIEW',
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/reports/overview`),
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'account_overview_reports',
|
||||
},
|
||||
{
|
||||
@@ -27,6 +30,9 @@ const reports = accountId => ({
|
||||
label: 'REPORTS_CONVERSATION',
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/reports/conversation`),
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'conversation_reports',
|
||||
},
|
||||
{
|
||||
@@ -34,6 +40,9 @@ const reports = accountId => ({
|
||||
label: 'CSAT',
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/reports/csat`),
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'csat_reports',
|
||||
},
|
||||
{
|
||||
@@ -42,6 +51,9 @@ const reports = accountId => ({
|
||||
hasSubMenu: false,
|
||||
featureFlag: FEATURE_FLAGS.RESPONSE_BOT,
|
||||
toState: frontendURL(`accounts/${accountId}/reports/bot`),
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'bot_reports',
|
||||
},
|
||||
{
|
||||
@@ -49,6 +61,9 @@ const reports = accountId => ({
|
||||
label: 'REPORTS_AGENT',
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/reports/agent`),
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'agent_reports',
|
||||
},
|
||||
{
|
||||
@@ -56,6 +71,9 @@ const reports = accountId => ({
|
||||
label: 'REPORTS_LABEL',
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/reports/label`),
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'label_reports',
|
||||
},
|
||||
{
|
||||
@@ -63,6 +81,9 @@ const reports = accountId => ({
|
||||
label: 'REPORTS_INBOX',
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/reports/inboxes`),
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'inbox_reports',
|
||||
},
|
||||
{
|
||||
@@ -70,6 +91,9 @@ const reports = accountId => ({
|
||||
label: 'REPORTS_TEAM',
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/reports/teams`),
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'team_reports',
|
||||
},
|
||||
{
|
||||
@@ -78,6 +102,9 @@ const reports = accountId => ({
|
||||
hasSubMenu: false,
|
||||
featureFlag: FEATURE_FLAGS.SLA,
|
||||
toState: frontendURL(`accounts/${accountId}/reports/sla`),
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'sla_reports',
|
||||
},
|
||||
],
|
||||
|
||||
@@ -47,6 +47,9 @@ const settings = accountId => ({
|
||||
label: 'ACCOUNT_SETTINGS',
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/settings/general`),
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
toStateName: 'general_settings_index',
|
||||
},
|
||||
{
|
||||
@@ -55,6 +58,9 @@ const settings = accountId => ({
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/settings/agents/list`),
|
||||
toStateName: 'agent_list',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
featureFlag: FEATURE_FLAGS.AGENT_MANAGEMENT,
|
||||
},
|
||||
{
|
||||
@@ -63,6 +69,9 @@ const settings = accountId => ({
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/settings/teams/list`),
|
||||
toStateName: 'settings_teams_list',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
featureFlag: FEATURE_FLAGS.TEAM_MANAGEMENT,
|
||||
},
|
||||
{
|
||||
@@ -71,6 +80,9 @@ const settings = accountId => ({
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/settings/inboxes/list`),
|
||||
toStateName: 'settings_inbox_list',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
featureFlag: FEATURE_FLAGS.INBOX_MANAGEMENT,
|
||||
},
|
||||
{
|
||||
@@ -79,6 +91,9 @@ const settings = accountId => ({
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/settings/labels/list`),
|
||||
toStateName: 'labels_list',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
featureFlag: FEATURE_FLAGS.LABELS,
|
||||
},
|
||||
{
|
||||
@@ -89,6 +104,9 @@ const settings = accountId => ({
|
||||
`accounts/${accountId}/settings/custom-attributes/list`
|
||||
),
|
||||
toStateName: 'attributes_list',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
featureFlag: FEATURE_FLAGS.CUSTOM_ATTRIBUTES,
|
||||
},
|
||||
{
|
||||
@@ -97,6 +115,9 @@ const settings = accountId => ({
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/settings/automation/list`),
|
||||
toStateName: 'automation_list',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
featureFlag: FEATURE_FLAGS.AUTOMATIONS,
|
||||
},
|
||||
{
|
||||
@@ -106,6 +127,9 @@ const settings = accountId => ({
|
||||
globalConfigFlag: 'csmlEditorHost',
|
||||
toState: frontendURL(`accounts/${accountId}/settings/agent-bots`),
|
||||
toStateName: 'agent_bots',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
featureFlag: FEATURE_FLAGS.AGENT_BOTS,
|
||||
},
|
||||
{
|
||||
@@ -114,6 +138,9 @@ const settings = accountId => ({
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/settings/macros`),
|
||||
toStateName: 'macros_wrapper',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
featureFlag: FEATURE_FLAGS.MACROS,
|
||||
},
|
||||
{
|
||||
@@ -124,6 +151,9 @@ const settings = accountId => ({
|
||||
`accounts/${accountId}/settings/canned-response/list`
|
||||
),
|
||||
toStateName: 'canned_list',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
featureFlag: FEATURE_FLAGS.CANNED_RESPONSES,
|
||||
},
|
||||
{
|
||||
@@ -132,6 +162,9 @@ const settings = accountId => ({
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/settings/integrations`),
|
||||
toStateName: 'settings_integrations',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
featureFlag: FEATURE_FLAGS.INTEGRATIONS,
|
||||
},
|
||||
{
|
||||
@@ -140,6 +173,9 @@ const settings = accountId => ({
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/settings/applications`),
|
||||
toStateName: 'settings_applications',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
featureFlag: FEATURE_FLAGS.INTEGRATIONS,
|
||||
},
|
||||
{
|
||||
@@ -150,6 +186,9 @@ const settings = accountId => ({
|
||||
toStateName: 'auditlogs_list',
|
||||
isEnterpriseOnly: true,
|
||||
featureFlag: FEATURE_FLAGS.AUDIT_LOGS,
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
beta: true,
|
||||
},
|
||||
{
|
||||
@@ -160,6 +199,9 @@ const settings = accountId => ({
|
||||
toStateName: 'sla_list',
|
||||
isEnterpriseOnly: true,
|
||||
featureFlag: FEATURE_FLAGS.SLA,
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
beta: true,
|
||||
},
|
||||
{
|
||||
@@ -168,6 +210,9 @@ const settings = accountId => ({
|
||||
hasSubMenu: false,
|
||||
toState: frontendURL(`accounts/${accountId}/settings/billing`),
|
||||
toStateName: 'billing_settings_index',
|
||||
meta: {
|
||||
permissions: ['account_manage'],
|
||||
},
|
||||
showOnlyOnCloud: true,
|
||||
},
|
||||
],
|
||||
|
||||
@@ -80,12 +80,9 @@ export default {
|
||||
return this.customViews.filter(view => view.filter_type === 'contact');
|
||||
},
|
||||
accessibleMenuItems() {
|
||||
if (!this.currentRole) {
|
||||
return [];
|
||||
}
|
||||
const menuItemsFilteredByPermissions = this.menuConfig.menuItems.filter(
|
||||
menuItem => {
|
||||
const { meta: { menuPermissions = [] } = {} } = menuItem;
|
||||
const { meta: { permissions: menuPermissions = [] } = {} } = menuItem;
|
||||
const { permissions: userPermissions = [] } = this.currentUser;
|
||||
return menuPermissions.some(permission =>
|
||||
userPermissions.includes(permission)
|
||||
|
||||
@@ -10,7 +10,7 @@ const props = defineProps({
|
||||
});
|
||||
|
||||
const getters = useStoreGetters();
|
||||
const user = getters.getCurrentUser();
|
||||
const user = getters.getCurrentUser.value;
|
||||
|
||||
const hasPermission = computed(() =>
|
||||
props.permissions.some(permission => user.permissions.includes(permission))
|
||||
|
||||
Reference in New Issue
Block a user