fix: show role options based on logged in user's role

This commit is contained in:
Shariq Ansari 2025-06-17 13:01:11 +05:30
parent 2a2c832e0b
commit 12213de478
2 changed files with 18 additions and 7 deletions

View File

@ -28,11 +28,7 @@
class="mt-4" class="mt-4"
v-model="role" v-model="role"
:label="__('Invite as')" :label="__('Invite as')"
:options="[ :options="roleOptions"
{ label: __('Sales User'), value: 'Sales User' },
{ label: __('Manager'), value: 'Sales Manager' },
{ label: __('Admin'), value: 'System Manager' },
]"
:description="description" :description="description"
/> />
</div> </div>
@ -92,6 +88,7 @@
<script setup> <script setup>
import MultiSelectEmailInput from '@/components/Controls/MultiSelectEmailInput.vue' import MultiSelectEmailInput from '@/components/Controls/MultiSelectEmailInput.vue'
import { validateEmail, convertArrayToString } from '@/utils' import { validateEmail, convertArrayToString } from '@/utils'
import { usersStore } from '@/stores/users'
import { import {
createListResource, createListResource,
createResource, createResource,
@ -102,6 +99,7 @@ import { useOnboarding } from 'frappe-ui/frappe'
import { ref, computed } from 'vue' import { ref, computed } from 'vue'
const { updateOnboardingStep } = useOnboarding('frappecrm') const { updateOnboardingStep } = useOnboarding('frappecrm')
const { isAdmin, isManager } = usersStore()
const invitees = ref([]) const invitees = ref([])
const role = ref('Sales User') const role = ref('Sales User')
@ -112,12 +110,20 @@ const description = computed(() => {
'System Manager': 'System Manager':
'Can manage all aspects of the CRM, including user management, customizations and settings.', 'Can manage all aspects of the CRM, including user management, customizations and settings.',
'Sales Manager': 'Sales Manager':
'Can manage and invite new agents, and create public & private views (reports).', 'Can manage and invite new users, and create public & private views (reports).',
'Sales User': 'Sales User':
'Can work with leads and deals and create private views (reports).', 'Can work with leads and deals and create private views (reports).',
}[role.value] }[role.value]
}) })
const roleOptions = computed(() => {
return [
{ value: 'Sales User', label: __('Sales User') },
...(isManager() ? [{ value: 'Sales Manager', label: __('Manager') }] : []),
...(isAdmin() ? [{ value: 'System Manager', label: __('Admin') }] : []),
]
})
const roleMap = { const roleMap = {
'Sales User': __('Sales User'), 'Sales User': __('Sales User'),
'Sales Manager': __('Manager'), 'Sales Manager': __('Manager'),
@ -134,7 +140,7 @@ const inviteByEmail = createResource({
}, },
onSuccess(data) { onSuccess(data) {
if (data?.existing_invites?.length) { if (data?.existing_invites?.length) {
error.value = __('Agent with email {0} already exists', [ error.value = __('User with email {0} already exists', [
data.existing_invites.join(', '), data.existing_invites.join(', '),
]) ])
} else { } else {

View File

@ -49,6 +49,10 @@ export const usersStore = defineStore('crm-users', () => {
return usersByName[email] return usersByName[email]
} }
function isAdmin(email) {
return getUser(email).is_admin
}
function isManager(email) { function isManager(email) {
return getUser(email).is_manager return getUser(email).is_manager
} }
@ -68,6 +72,7 @@ export const usersStore = defineStore('crm-users', () => {
return { return {
users, users,
getUser, getUser,
isAdmin,
isManager, isManager,
isAgent, isAgent,
getUserRole, getUserRole,