From 3603f2191c45f5c7de85501e3a18dddbf234aa3b Mon Sep 17 00:00:00 2001 From: sazzadulalambd Date: Thu, 21 May 2026 20:22:32 +0600 Subject: [PATCH] feat: expand RBAC system with granular permissions and update role definitions and UI configuration --- src/app/admin/roles/page.tsx | 306 +++++++++++++++++++++++++---------- src/lib/auth.ts | 61 ++++++- 2 files changed, 273 insertions(+), 94 deletions(-) diff --git a/src/app/admin/roles/page.tsx b/src/app/admin/roles/page.tsx index 101905d..80d6de9 100644 --- a/src/app/admin/roles/page.tsx +++ b/src/app/admin/roles/page.tsx @@ -1,7 +1,7 @@ 'use client'; import { useState } from 'react'; -import { Shield, Plus, Search, X, Edit, Trash2, Copy, Check, ChevronDown, ChevronRight, BookOpen, FileSearch, Settings, BarChart3, Bike, Users, Briefcase, Truck, Store, BatteryCharging, Building2, Wrench, DollarSign, TrendingUp, UserCog } from 'lucide-react'; +import { Shield, Plus, Search, X, Edit, Trash2, Copy, Check, ChevronDown, ChevronRight, BookOpen, FileSearch, Settings, BarChart3, Bike, Users, Briefcase, Truck, Store, BatteryCharging, Building2, Wrench, DollarSign, TrendingUp, UserCog, Bell, MessageSquare } from 'lucide-react'; interface Permission { key: string; @@ -35,11 +35,10 @@ interface Role { } const buildDefaultGroups = (): PermissionGroup[] => [ - { id: 'kyc', title: 'KYC Requests & Verification', - description: 'The Biker user will request from the app. Investor, Swap Station, Merchant will request from the website. Front desk officers (hub/head office) can request for Biker, Investor, Swap Station, Merchant and can upload remaining documents. Admin officers (head office) will approve or reject documents with notes and "make a Biker | Investor | Swap Station | Merchant".', + description: 'The Biker user will request from the app. Biker, Investor, Shop, Merchant will request from the website. Front desk officers (hub/head office) can request for Biker, Investor, Shop, Merchant, and can upload remaining documents. Admin managers (head office) will approve or reject documents with notes and "make a Biker | Investor | Shop | Merchant".', icon: FileSearch, permissions: [ { key: 'kyc.request', label: 'KYC Request', enabled: false }, @@ -62,15 +61,20 @@ const buildDefaultGroups = (): PermissionGroup[] => [ edit: { key: 'settings.kyc_documents_config', label: 'Config', enabled: false }, }, { - label: 'Plan Selection with Condition', + label: 'Plan Selection with EV Condition', view: { key: 'settings.plan_selection_with_condition_view', label: 'View', enabled: false }, edit: { key: 'settings.plan_selection_with_condition_config', label: 'Config', enabled: false }, }, { - label: 'Investment Plan', + label: 'EV Investment Plan', view: { key: 'settings.investment_plan_view', label: 'View', enabled: false }, edit: { key: 'settings.investment_plan_config', label: 'Config', enabled: false }, }, + { + label: 'Battery Investment Plan', + view: { key: 'settings.battery_investment_plan_view', label: 'View', enabled: false }, + edit: { key: 'settings.battery_investment_plan_config', label: 'Config', enabled: false }, + }, { label: 'Swap Station Plan', view: { key: 'settings.swap_station_plan_view', label: 'View', enabled: false }, @@ -86,13 +90,23 @@ const buildDefaultGroups = (): PermissionGroup[] => [ view: { key: 'settings.company_policy_view', label: 'View', enabled: false }, edit: { key: 'settings.company_policy_config', label: 'Config', enabled: false }, }, + { + label: 'Email & SMS Templates', + view: { key: 'settings.es_templates_view', label: 'View', enabled: false }, + edit: { key: 'settings.es_templates_config', label: 'Config', enabled: false }, + }, + { + label: 'EV Parts', + view: { key: 'settings.ev_parts_view', label: 'View', enabled: false }, + edit: { key: 'settings.ev_parts_config', label: 'Config', enabled: false }, + }, ], permissions: [], }, { id: 'dashboard', title: 'Dashboard', - description: 'Access to main dashboard', + description: 'Access to main dashboard insights and summary metrics.', icon: BarChart3, permissions: [ { key: 'dashboard.view', label: 'View Dashboard', enabled: false }, @@ -101,133 +115,188 @@ const buildDefaultGroups = (): PermissionGroup[] => [ { id: 'rentals', title: 'Rentals', - description: 'Manage rental operations', + description: 'Front desk officers can select user, rental type, contract duration, bike, hub and payment methods to create rentals. Bikers can accept or reject rentals. Managers can edit, cancel, lock, or unlock rentals and view default and penalty fee tracking.', icon: Bike, permissions: [ - { key: 'rentals.view', label: 'View', enabled: false }, - { key: 'rentals.create', label: 'Create', enabled: false }, - { key: 'rentals.edit', label: 'Edit', enabled: false }, - { key: 'rentals.delete', label: 'Delete', enabled: false }, + { key: 'rental.view', label: 'View Rentals', enabled: false }, + { key: 'rental.create', label: 'Create Rental', enabled: false }, + { key: 'rental.requset', label: 'Rental Request', enabled: false }, + { key: 'rental.accept', label: 'Accept Rental', enabled: false }, + { key: 'rental.reject', label: 'Reject Rental', enabled: false }, + { key: 'rental.edit', label: 'Edit Rental', enabled: false }, + { key: 'rental.cancel', label: 'Cancel Rental', enabled: false }, + { key: 'rental.image_approve', label: 'Image Approve', enabled: false }, + { key: 'rental.lock', label: 'Lock Rental', enabled: false }, + { key: 'rental.unlock', label: 'Unlock Rental', enabled: false }, ] }, { id: 'bikers', - title: 'Bikers', - description: 'Manage bikers', + title: 'Bikers Management', + description: 'Handle automatic biker profile creation after KYC approval, basic detail updates, status/membership changes, document uploads/removals, internal notes and activity tracking.', icon: Users, permissions: [ - { key: 'bikers.view', label: 'View', enabled: false }, - { key: 'bikers.create', label: 'Create', enabled: false }, - { key: 'bikers.edit', label: 'Edit', enabled: false }, - { key: 'bikers.delete', label: 'Delete', enabled: false }, + { key: 'biker.view', label: 'View Biker Profile', enabled: false }, + { key: 'biker.create', label: 'Create Biker Profile', enabled: false }, + { key: 'biker.edit', label: 'Edit Biker Profile', enabled: false }, + { key: 'biker.delete', label: 'Soft Delete / Deactivate Biker', enabled: false }, + { key: 'biker.status_change', label: 'Change Biker Status', enabled: false }, + { key: 'biker.membership_change', label: 'Change Biker Membership', enabled: false }, + { key: 'biker.kyc_view', label: 'View Biker KYC Info', enabled: false }, + { key: 'biker.kyc_update', label: 'Update Biker KYC Info', enabled: false }, + { key: 'biker.activity_view', label: 'View Biker Activity Logs', enabled: false }, + { key: 'biker.document_view', label: 'View Biker Documents', enabled: false }, + { key: 'biker.document_upload', label: 'Upload Biker Documents', enabled: false }, + { key: 'biker.document_delete', label: 'Remove Biker Documents', enabled: false }, + { key: 'biker.rental_history_view', label: 'View Biker Rental History', enabled: false }, + { key: 'biker.payment_history_view', label: 'View Biker Payment History', enabled: false }, + { key: 'biker.wallet_view', label: 'View Biker Wallet Balance', enabled: false }, + { key: 'biker.note_add', label: 'Add Biker Internal Notes', enabled: false }, + { key: 'biker.note_view', label: 'View Biker Internal Notes', enabled: false }, + { key: 'biker.export', label: 'Export Biker Reports & Data', enabled: false }, + { key: 'biker.make_valid_user', label: 'Make Biker Active & Valid', enabled: false }, + { key: 'biker.lock', label: 'Lock Biker Account', enabled: false }, + { key: 'biker.unlock', label: 'Unlock Biker Account', enabled: false }, ] }, { id: 'investors', - title: 'Investors', - description: 'Manage investors', + title: 'Investors Management', + description: 'Manage automatically created profiles, assign EV & Battery Investment plans, oversee bank accounts/tax logs, track daily rental shares, process withdrawal requests and notifications.', icon: Briefcase, permissions: [ - { key: 'investors.view', label: 'View', enabled: false }, - { key: 'investors.create', label: 'Create', enabled: false }, - { key: 'investors.edit', label: 'Edit', enabled: false }, - { key: 'investors.delete', label: 'Delete', enabled: false }, + { key: 'investor.view', label: 'View Investors', enabled: false }, + { key: 'investor.create', label: 'Create Investor Profile', enabled: false }, + { key: 'investor.edit', label: 'Edit Investor Details', enabled: false }, + { key: 'investor.delete', label: 'Soft Delete Investor', enabled: false }, + { key: 'investor.plan_assign', label: 'Assign Investment Plans', enabled: false }, + { key: 'investor.bank_edit', label: 'Manage Bank & Tax Info', enabled: false }, + { key: 'investor.withdraw_request', label: 'Withdrawal Requests', enabled: false }, + { key: 'investor.document_upload', label: 'Upload Investor Documents', enabled: false }, + { key: 'investor.document_approve', label: 'Approve Investor Documents', enabled: false }, + { key: 'investor.notification_view', label: 'View Investor Notifications', enabled: false }, + ] + }, + { + id: 'battery', + title: 'Battery Management', + description: 'Add new battery assets with pricing, deposit, daily rent, and BMS identifiers. Oversee ownership history, rental transactions, damage logs, maintenance, and data exports.', + icon: BatteryCharging, + permissions: [ + { key: 'battery.view', label: 'View Batteries', enabled: false }, + { key: 'battery.create', label: 'Add Battery & BMS Config', enabled: false }, + { key: 'battery.edit', label: 'Edit Battery details', enabled: false }, + { key: 'battery.delete', label: 'Delete Battery Record', enabled: false }, + { key: 'battery.export', label: 'Export Battery History', enabled: false }, ] }, { id: 'fleet', - title: 'Fleet', - description: 'Manage fleet vehicles', + title: 'Fleet Management', + description: 'Register new EV bikes, configure GPS details, associate battery packs, view rental transactions, maintenance, damage history, investor ownership logs, and activity trackers.', icon: Truck, permissions: [ - { key: 'fleet.view', label: 'View', enabled: false }, - { key: 'fleet.create', label: 'Create', enabled: false }, - { key: 'fleet.edit', label: 'Edit', enabled: false }, - { key: 'fleet.delete', label: 'Delete', enabled: false }, + { key: 'fleet.view', label: 'View Fleet Vehicles', enabled: false }, + { key: 'fleet.create', label: 'Register New Bike', enabled: false }, + { key: 'fleet.edit', label: 'Edit Fleet Vehicle', enabled: false }, + { key: 'fleet.delete', label: 'Soft Delete Bike', enabled: false }, + { key: 'fleet.gps_config', label: 'Configure Vehicle GPS', enabled: false }, + { key: 'fleet.export', label: 'Export Fleet Records', enabled: false }, ] }, { - id: 'merchants', - title: 'Merchants', - description: 'Manage merchants', - icon: Store, + id: 'service_centers', + title: 'Service Centers', + description: 'Add and manage service center listings, locations, and capacity. Track fleet service logs, maintenance logs, and uploaded dealer/biker invoices.', + icon: Wrench, permissions: [ - { key: 'merchants.view', label: 'View', enabled: false }, - { key: 'merchants.create', label: 'Create', enabled: false }, - { key: 'merchants.edit', label: 'Edit', enabled: false }, - { key: 'merchants.delete', label: 'Delete', enabled: false }, - ] - }, - { - id: 'swap_stations', - title: 'Swap Stations', - description: 'Manage swap stations', - icon: BatteryCharging, - permissions: [ - { key: 'swap_stations.view', label: 'View', enabled: false }, - { key: 'swap_stations.create', label: 'Create', enabled: false }, - { key: 'swap_stations.edit', label: 'Edit', enabled: false }, - { key: 'swap_stations.delete', label: 'Delete', enabled: false }, - ] - }, - { - id: 'hubs', - title: 'Hubs', - description: 'Manage hubs', - icon: Building2, - permissions: [ - { key: 'hubs.view', label: 'View', enabled: false }, - { key: 'hubs.create', label: 'Create', enabled: false }, - { key: 'hubs.edit', label: 'Edit', enabled: false }, - { key: 'hubs.delete', label: 'Delete', enabled: false }, + { key: 'service_center.view', label: 'View Service Centers', enabled: false }, + { key: 'service_center.create', label: 'Create Service Center', enabled: false }, + { key: 'service_center.edit', label: 'Edit Service Center Details', enabled: false }, + { key: 'service_center.delete', label: 'Remove Service Center', enabled: false }, ] }, { id: 'maintenance', - title: 'Maintenance', - description: 'Manage maintenance requests', - icon: Wrench, + title: 'Damage & Maintenance', + description: 'Report damage or technical issues from the biker side, and manage repairs, spare parts inventory, claim notifications, and service schedules on the admin side.', + icon: Settings, permissions: [ - { key: 'maintenance.view', label: 'View', enabled: false }, - { key: 'maintenance.create', label: 'Create', enabled: false }, - { key: 'maintenance.edit', label: 'Edit', enabled: false }, - { key: 'maintenance.delete', label: 'Delete', enabled: false }, + { key: 'maintenance.view', label: 'View Damage Logs', enabled: false }, + { key: 'maintenance.create', label: 'Report Damage/Claim Free Service', enabled: false }, + { key: 'maintenance.edit', label: 'Update Repair Details', enabled: false }, + { key: 'maintenance.delete', label: 'Delete Repair Log', enabled: false }, ] }, { id: 'accounting', title: 'Accounting', - description: 'Manage financial records', + description: 'Oversee automatic journals generated by rentals, verify battery rental deposits, maintain general ledgers, and process and verify investor withdrawal requests.', icon: DollarSign, permissions: [ - { key: 'accounting.view', label: 'View', enabled: false }, - { key: 'accounting.create', label: 'Create', enabled: false }, - { key: 'accounting.edit', label: 'Edit', enabled: false }, - { key: 'accounting.delete', label: 'Delete', enabled: false }, + { key: 'accounting.view', label: 'View Financial Ledger', enabled: false }, + { key: 'accounting.create', label: 'Create Financial Entry', enabled: false }, + { key: 'accounting.edit', label: 'Modify Financial Entry', enabled: false }, + { key: 'accounting.delete', label: 'Void Financial Entry', enabled: false }, + { key: 'accounting.withdraw_process', label: 'Process & Pay Withdrawal', enabled: false }, + ] + }, + { + id: 'hubs', + title: 'Hubs Management', + description: 'Admin can create and manage geographic hubs, assign dedicated Hub Managers, allocate bike/battery inventory, and process hub-specific rentals and KYC checkups.', + icon: Building2, + permissions: [ + { key: 'hub.view', label: 'View Hubs', enabled: false }, + { key: 'hub.create', label: 'Create New Hub', enabled: false }, + { key: 'hub.edit', label: 'Edit Hub Details & Staff', enabled: false }, + { key: 'hub.delete', label: 'Deactivate Hub', enabled: false }, ] }, { id: 'reports', - title: 'Reports', - description: 'View and generate reports', + title: 'Reports & Analytics', + description: 'Generate, schedule, view, and export comprehensive administrative reports for KYC, fleet, investment payouts, rentals, and general ledger operations.', icon: TrendingUp, permissions: [ - { key: 'reports.view', label: 'View', enabled: false }, - { key: 'reports.export', label: 'Export', enabled: false }, + { key: 'reports.view', label: 'View Reports', enabled: false }, + { key: 'reports.export', label: 'Export Reports (CSV/PDF)', enabled: false }, ] }, { id: 'users', - title: 'Users', - description: 'Manage system users', + title: 'Users & Staff Management', + description: 'Admin-only module for managing internal administrative users, hub managers, front desk staff, accountants, and Super Admins.', icon: UserCog, permissions: [ - { key: 'users.view', label: 'View', enabled: false }, - { key: 'users.create', label: 'Create', enabled: false }, - { key: 'users.edit', label: 'Edit', enabled: false }, - { key: 'users.delete', label: 'Delete', enabled: false }, + { key: 'users.view', label: 'View System Users', enabled: false }, + { key: 'users.create', label: 'Create Staff User', enabled: false }, + { key: 'users.edit', label: 'Edit Staff details', enabled: false }, + { key: 'users.delete', label: 'Deactivate Staff User', enabled: false }, ] }, + { + id: 'roles', + title: 'Roles & Access Permissions', + description: 'Super Admin-only module to construct custom administrative roles and configure fine-grained permissions.', + icon: Shield, + permissions: [ + { key: 'roles.view', label: 'View Roles list', enabled: false }, + { key: 'roles.config', label: 'Configure & Update Roles', enabled: false }, + ] + }, + { + id: 'notifications', + title: 'Notifications & Messaging', + description: 'Access system logs, alerts (KYC Verification, Rentals, Vehicle Service, Cabinet, Ledger), compose custom system notifications, broadcast messages, and schedule notifications.', + icon: Bell, + permissions: [ + { key: 'notifications.view', label: 'View Notifications', enabled: false }, + { key: 'messaging.compose', label: 'Compose Message', enabled: false }, + { key: 'messaging.broadcast', label: 'Broadcast message', enabled: false }, + { key: 'messaging.schedule', label: 'Schedule notification', enabled: false }, + ] + } ]; const mockRoles: Role[] = [ @@ -238,7 +307,12 @@ const mockRoles: Role[] = [ isDefault: false, permissionGroups: buildDefaultGroups().map(g => ({ ...g, - permissions: g.permissions.map(p => ({ ...p, enabled: true })) + permissions: g.permissions.map(p => ({ ...p, enabled: true })), + permissionPairs: g.permissionPairs?.map(p => ({ + ...p, + view: { ...p.view, enabled: true }, + edit: { ...p.edit, enabled: true } + })) })) }, { @@ -251,13 +325,18 @@ const mockRoles: Role[] = [ permissions: g.permissions.map(p => ({ ...p, enabled: !p.key.includes('delete') + })), + permissionPairs: g.permissionPairs?.map(p => ({ + ...p, + view: { ...p.view, enabled: true }, + edit: { ...p.edit, enabled: !p.edit.key.includes('config') && !p.edit.key.includes('delete') } })) })) }, { id: 'ROLE-003', name: 'Front Desk Officer', - description: 'Hub/head office officer - can request KYC and upload documents', + description: 'Hub/head office officer - can request KYC, create rentals and upload documents', isDefault: false, permissionGroups: buildDefaultGroups().map(g => { if (g.id === 'kyc') { @@ -269,9 +348,55 @@ const mockRoles: Role[] = [ })) }; } + if (g.id === 'rentals') { + return { + ...g, + permissions: g.permissions.map(p => ({ + ...p, + enabled: ['rental.view', 'rental.create', 'rental.image_approve'].includes(p.key) + })) + }; + } + if (g.id === 'bikers') { + return { + ...g, + permissions: g.permissions.map(p => ({ + ...p, + enabled: ['biker.view', 'biker.edit', 'biker.kyc_view', 'biker.kyc_update', 'biker.activity_view', 'biker.document_view', 'biker.document_upload', 'biker.rental_history_view', 'biker.payment_history_view', 'biker.wallet_view', 'biker.note_add', 'biker.note_view'].includes(p.key) + })) + }; + } + if (g.id === 'investors') { + return { + ...g, + permissions: g.permissions.map(p => ({ + ...p, + enabled: ['investor.view', 'investor.document_upload'].includes(p.key) + })) + }; + } + if (g.id === 'settings') { + return { + ...g, + permissionPairs: g.permissionPairs?.map(p => ({ + ...p, + view: { ...p.view, enabled: true }, + edit: { ...p.edit, enabled: false } + })) + }; + } if (g.id === 'dashboard') { return { ...g, permissions: g.permissions.map(p => ({ ...p, enabled: true })) }; } + if (['battery', 'fleet', 'service_centers', 'maintenance', 'accounting', 'hubs', 'reports'].includes(g.id)) { + return { + ...g, + permissions: g.permissions.map(p => ({ + ...p, + enabled: p.key.includes('view') + })) + }; + } return g; }) }, @@ -319,7 +444,16 @@ const mockRoles: Role[] = [ ...g, permissions: g.permissions.map(p => ({ ...p, - enabled: ['rentals.view', 'rentals.create'].includes(p.key) + enabled: ['rental.requset', 'rental.accept', 'rental.reject', 'rental.view'].includes(p.key) + })) + }; + } + if (g.id === 'bikers') { + return { + ...g, + permissions: g.permissions.map(p => ({ + ...p, + enabled: ['biker.view'].includes(p.key) })) }; } diff --git a/src/lib/auth.ts b/src/lib/auth.ts index f267e18..e7ff293 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -1,12 +1,57 @@ +const ALL_PERMISSIONS = [ + 'kyc.request', 'kyc.view', 'kyc.doc_upload', 'kyc.doc_approve', 'kyc.doc_reject', 'kyc.make_valid_user', + 'settings.kyc_documents_view', 'settings.kyc_documents_config', + 'settings.plan_selection_with_condition_view', 'settings.plan_selection_with_condition_config', + 'settings.investment_plan_view', 'settings.investment_plan_config', + 'settings.battery_investment_plan_view', 'settings.battery_investment_plan_config', + 'settings.swap_station_plan_view', 'settings.swap_station_plan_config', + 'settings.rider_request_plan_for_merchant_view', 'settings.rider_request_plan_for_merchant_config', + 'settings.company_policy_view', 'settings.company_policy_config', + 'settings.es_templates_view', 'settings.es_templates_config', + 'settings.ev_parts_view', 'settings.ev_parts_config', + 'dashboard.view', + 'rental.requset', 'rental.accept', 'rental.reject', 'rental.view', 'rental.cancel', 'rental.edit', 'rental.image_approve', 'rental.lock', 'rental.unlock', 'rental.create', + 'biker.view', 'biker.create', 'biker.edit', 'biker.delete', 'biker.status_change', 'biker.membership_change', 'biker.kyc_view', 'biker.kyc_update', 'biker.activity_view', 'biker.document_view', 'biker.document_upload', 'biker.document_delete', 'biker.rental_history_view', 'biker.payment_history_view', 'biker.wallet_view', 'biker.note_add', 'biker.note_view', 'biker.export', 'biker.make_valid_user', 'biker.lock', 'biker.unlock', + 'investor.view', 'investor.create', 'investor.edit', 'investor.delete', 'investor.plan_assign', 'investor.bank_edit', 'investor.withdraw_request', 'investor.document_upload', 'investor.document_approve', 'investor.notification_view', + 'battery.view', 'battery.create', 'battery.edit', 'battery.delete', 'battery.export', + 'fleet.view', 'fleet.create', 'fleet.edit', 'fleet.delete', 'fleet.gps_config', 'fleet.export', + 'service_center.view', 'service_center.create', 'service_center.edit', 'service_center.delete', + 'maintenance.view', 'maintenance.create', 'maintenance.edit', 'maintenance.delete', + 'accounting.view', 'accounting.create', 'accounting.edit', 'accounting.delete', 'accounting.withdraw_process', + 'hub.view', 'hub.create', 'hub.edit', 'hub.delete', + 'reports.view', 'reports.export', + 'users.view', 'users.create', 'users.edit', 'users.delete', + 'roles.view', 'roles.config', + 'notifications.view', 'messaging.compose', 'messaging.broadcast', 'messaging.schedule' +]; + const ROLE_PERMISSIONS: Record = { - super_admin: ['kyc.request', 'kyc.view', 'kyc.doc_upload', 'kyc.doc_approve', 'kyc.doc_reject', 'kyc.make_valid_user', 'dashboard.view', 'rental.view', 'rental.create', 'rental.accept', 'rental.reject', 'rental.cancel', 'rental.edit', 'rental.image_approve', 'rental.lock', 'rental.unlock'], - admin_manager: ['kyc.request', 'kyc.view', 'kyc.doc_upload', 'kyc.doc_approve', 'kyc.doc_reject', 'kyc.make_valid_user', 'dashboard.view', 'rental.view', 'rental.create', 'rental.accept', 'rental.reject', 'rental.cancel', 'rental.edit', 'rental.image_approve', 'rental.lock', 'rental.unlock'], - staff: ['kyc.request', 'kyc.view', 'kyc.doc_upload', 'dashboard.view', 'rental.view', 'rental.create'], - accountant: ['dashboard.view', 'accounting.view', 'accounting.create', 'accounting.edit', 'accounting.delete'], - investor: ['dashboard.view', 'kyc.request', 'kyc.view'], - biker: ['dashboard.view', 'kyc.request', 'kyc.view', 'rentals.view', 'rentals.create'], - 'swap-station': ['dashboard.view', 'kyc.request', 'kyc.view'], - merchant: ['dashboard.view', 'kyc.request', 'kyc.view', 'merchants.view'], + super_admin: ALL_PERMISSIONS, + admin_manager: ALL_PERMISSIONS.filter(p => !p.includes('delete') || p === 'biker.document_delete' || p === 'fleet.delete' || p === 'battery.delete'), + staff: [ + 'kyc.request', 'kyc.view', 'kyc.doc_upload', + 'settings.kyc_documents_view', 'settings.plan_selection_with_condition_view', 'settings.investment_plan_view', 'settings.battery_investment_plan_view', 'settings.swap_station_plan_view', 'settings.rider_request_plan_for_merchant_view', 'settings.company_policy_view', 'settings.es_templates_view', 'settings.ev_parts_view', + 'dashboard.view', + 'rental.view', 'rental.create', 'rental.image_approve', + 'biker.view', 'biker.edit', 'biker.kyc_view', 'biker.kyc_update', 'biker.activity_view', 'biker.document_view', 'biker.document_upload', 'biker.rental_history_view', 'biker.payment_history_view', 'biker.wallet_view', 'biker.note_add', 'biker.note_view', + 'investor.view', 'investor.document_upload', + 'battery.view', 'fleet.view', 'service_center.view', 'maintenance.view', 'maintenance.create', 'accounting.view', 'hub.view', 'reports.view', 'notifications.view' + ], + accountant: [ + 'dashboard.view', 'accounting.view', 'accounting.create', 'accounting.edit', 'accounting.delete', 'accounting.withdraw_process', 'reports.view', 'reports.export' + ], + investor: [ + 'dashboard.view', 'kyc.request', 'kyc.view', 'investor.view', 'investor.bank_edit', 'investor.withdraw_request', 'investor.document_upload', 'notifications.view' + ], + biker: [ + 'dashboard.view', 'kyc.request', 'kyc.view', 'rental.requset', 'rental.accept', 'rental.reject', 'rental.view', 'biker.view', 'maintenance.create', 'maintenance.view', 'notifications.view' + ], + 'swap-station': [ + 'dashboard.view', 'kyc.request', 'kyc.view', 'notifications.view' + ], + merchant: [ + 'dashboard.view', 'kyc.request', 'kyc.view', 'settings.rider_request_plan_for_merchant_view', 'notifications.view' + ], }; export const canRentalAccept = () => hasPermission('rental.accept');