UNPKG

@ideal-photography/shared

Version:

Shared MongoDB and utility logic for Ideal Photography PWAs: users, products, services, bookings, orders/cart, galleries, reviews, notifications, campaigns, settings, audit logs, minimart items/orders, and push notification subscriptions.

428 lines (371 loc) 14.3 kB
// Permission Constants for Admin System export const PERMISSIONS = { // User Management USERS: { VIEW: 'users.view', EDIT: 'users.edit', DELETE: 'users.delete', VERIFY: 'users.verify', BLOCK: 'users.block', UNBLOCK: 'users.unblock', MANAGE_PERMISSIONS: 'users.manage_permissions', VIEW_VERIFICATION: 'users.view_verification', APPROVE_VERIFICATION: 'users.approve_verification', REJECT_VERIFICATION: 'users.reject_verification', VIEW_ANALYTICS: 'users.view_analytics', EXPORT_DATA: 'users.export_data' }, // Admin Management ADMIN: { VIEW: 'admin.view', CREATE: 'admin.create', EDIT: 'admin.edit', DELETE: 'admin.delete', MANAGE_ROLES: 'admin.manage_roles', MANAGE_PERMISSIONS: 'admin.manage_permissions', VIEW_HIERARCHY: 'admin.view_hierarchy', MANAGE_HIERARCHY: 'admin.manage_hierarchy', VIEW_ACTIVITY: 'admin.view_activity', MANAGE_SESSIONS: 'admin.manage_sessions', CREATE_INVITES: 'admin.create_invites', VERIFY_ADMINS: 'admin.verify_admins', VIEW_AUDIT_LOGS: 'admin.view_audit_logs' }, // Product Management PRODUCTS: { VIEW: 'products.view', CREATE: 'products.create', EDIT: 'products.edit', DELETE: 'products.delete', MANAGE_CATEGORIES: 'products.manage_categories', MANAGE_INVENTORY: 'products.manage_inventory', MANAGE_PRICING: 'products.manage_pricing', PUBLISH: 'products.publish', UNPUBLISH: 'products.unpublish', VIEW_ANALYTICS: 'products.view_analytics' }, // Equipment Management EQUIPMENT: { VIEW: 'equipment.view', CREATE: 'equipment.create', UPDATE: 'equipment.update', DELETE: 'equipment.delete', MANAGE_INVENTORY: 'equipment.manage_inventory', MANAGE_PRICING: 'equipment.manage_pricing', MANAGE_STATUS: 'equipment.manage_status', MANAGE_FEATURED: 'equipment.manage_featured', VIEW_ANALYTICS: 'equipment.view_analytics', MANAGE_MAINTENANCE: 'equipment.manage_maintenance' }, // Service Management SERVICES: { VIEW: 'services.view', CREATE: 'services.create', EDIT: 'services.edit', DELETE: 'services.delete', MANAGE_CATEGORIES: 'services.manage_categories', MANAGE_PRICING: 'services.manage_pricing', PUBLISH: 'services.publish', UNPUBLISH: 'services.unpublish', VIEW_ANALYTICS: 'services.view_analytics' }, // Makeover Management MAKEOVER: { VIEW: 'makeover.view', CREATE: 'makeover.create', UPDATE: 'makeover.update', DELETE: 'makeover.delete', MANAGE_OFFERS: 'makeover.manage_offers', MANAGE_SESSIONS: 'makeover.manage_sessions', VIEW_ANALYTICS: 'makeover.view_analytics' }, // Booking Management BOOKINGS: { VIEW: 'bookings.view', CREATE: 'bookings.create', EDIT: 'bookings.edit', DELETE: 'bookings.delete', CONFIRM: 'bookings.confirm', CANCEL: 'bookings.cancel', COMPLETE: 'bookings.complete', MANAGE_SCHEDULE: 'bookings.manage_schedule', VIEW_CALENDAR: 'bookings.view_calendar', MANAGE_CALENDAR: 'bookings.manage_calendar', VIEW_ANALYTICS: 'bookings.view_analytics', EXPORT_DATA: 'bookings.export_data' }, // Gallery Management GALLERIES: { VIEW: 'galleries.view', CREATE: 'galleries.create', EDIT: 'galleries.edit', DELETE: 'galleries.delete', PUBLISH: 'galleries.publish', UNPUBLISH: 'galleries.unpublish', MANAGE_MEDIA: 'galleries.manage_media', MANAGE_CATEGORIES: 'galleries.manage_categories', VIEW_ANALYTICS: 'galleries.view_analytics' }, // Media Management MEDIA: { VIEW: 'media.view', UPLOAD: 'media.upload', EDIT: 'media.edit', DELETE: 'media.delete', MANAGE_CATEGORIES: 'media.manage_categories', MANAGE_TAGS: 'media.manage_tags', MANAGE_STORAGE: 'media.manage_storage', VIEW_ANALYTICS: 'media.view_analytics' }, // Campaign Management CAMPAIGNS: { VIEW: 'campaigns.view', CREATE: 'campaigns.create', EDIT: 'campaigns.edit', DELETE: 'campaigns.delete', ACTIVATE: 'campaigns.activate', DEACTIVATE: 'campaigns.deactivate', MANAGE_TARGETING: 'campaigns.manage_targeting', MANAGE_SCHEDULING: 'campaigns.manage_scheduling', VIEW_ANALYTICS: 'campaigns.view_analytics', MANAGE_BUDGET: 'campaigns.manage_budget' }, // Order Management ORDERS: { VIEW: 'orders.view', CREATE: 'orders.create', EDIT: 'orders.edit', DELETE: 'orders.delete', PROCESS: 'orders.process', CANCEL: 'orders.cancel', REFUND: 'orders.refund', MANAGE_PAYMENTS: 'orders.manage_payments', VIEW_ANALYTICS: 'orders.view_analytics', EXPORT_DATA: 'orders.export_data' }, // Review Management REVIEWS: { VIEW: 'reviews.view', MODERATE: 'reviews.moderate', APPROVE: 'reviews.approve', REJECT: 'reviews.reject', DELETE: 'reviews.delete', MANAGE_SETTINGS: 'reviews.manage_settings', VIEW_ANALYTICS: 'reviews.view_analytics' }, // Notification Management NOTIFICATIONS: { VIEW: 'notifications.view', CREATE: 'notifications.create', EDIT: 'notifications.edit', DELETE: 'notifications.delete', SEND: 'notifications.send', MANAGE_TEMPLATES: 'notifications.manage_templates', MANAGE_CHANNELS: 'notifications.manage_channels', VIEW_ANALYTICS: 'notifications.view_analytics' }, // Email Management EMAIL: { VIEW: 'email.view', SEND: 'email.send', MANAGE_TEMPLATES: 'email.manage_templates', MANAGE_SETTINGS: 'email.manage_settings', VIEW_ANALYTICS: 'email.view_analytics', MANAGE_SUBSCRIPTIONS: 'email.manage_subscriptions' }, // Settings Management SETTINGS: { VIEW: 'settings.view', EDIT: 'settings.edit', MANAGE_SYSTEM: 'settings.manage_system', MANAGE_BRANDING: 'settings.manage_branding', MANAGE_INTEGRATIONS: 'settings.manage_integrations', MANAGE_SECURITY: 'settings.manage_security', MANAGE_PAYMENTS: 'settings.manage_payments', VIEW_AUDIT_LOGS: 'settings.view_audit_logs' }, // Analytics & Reporting ANALYTICS: { VIEW_DASHBOARD: 'analytics.view_dashboard', VIEW_REVENUE: 'analytics.view_revenue', VIEW_USER_ANALYTICS: 'analytics.view_user_analytics', VIEW_BOOKING_ANALYTICS: 'analytics.view_booking_analytics', VIEW_PRODUCT_ANALYTICS: 'analytics.view_product_analytics', VIEW_CAMPAIGN_ANALYTICS: 'analytics.view_campaign_analytics', EXPORT_REPORTS: 'analytics.export_reports', MANAGE_REPORTS: 'analytics.manage_reports' }, // Financial Management FINANCIAL: { VIEW_REVENUE: 'financial.view_revenue', VIEW_PAYMENTS: 'financial.view_payments', MANAGE_PAYMENTS: 'financial.manage_payments', VIEW_INVOICES: 'financial.view_invoices', MANAGE_INVOICES: 'financial.manage_invoices', VIEW_REFUNDS: 'financial.view_refunds', MANAGE_REFUNDS: 'financial.manage_refunds', VIEW_TAXES: 'financial.view_taxes', MANAGE_TAXES: 'financial.manage_taxes', EXPORT_FINANCIAL_DATA: 'financial.export_data' }, // Security & Compliance SECURITY: { VIEW_LOGS: 'security.view_logs', VIEW_INCIDENTS: 'security.view_incidents', MANAGE_INCIDENTS: 'security.manage_incidents', VIEW_THREATS: 'security.view_threats', MANAGE_THREATS: 'security.manage_threats', VIEW_COMPLIANCE: 'security.view_compliance', MANAGE_COMPLIANCE: 'security.manage_compliance', VIEW_AUDIT_LOGS: 'security.view_audit_logs', MANAGE_SECURITY_SETTINGS: 'security.manage_settings' }, // System Management SYSTEM: { VIEW_STATUS: 'system.view_status', MANAGE_MAINTENANCE: 'system.manage_maintenance', VIEW_LOGS: 'system.view_logs', MANAGE_BACKUPS: 'system.manage_backups', MANAGE_UPDATES: 'system.manage_updates', MANAGE_INTEGRATIONS: 'system.manage_integrations', VIEW_PERFORMANCE: 'system.view_performance', MANAGE_PERFORMANCE: 'system.manage_performance' } }; // Flatten all permissions into a single array export const ALL_PERMISSIONS = Object.values(PERMISSIONS).reduce((acc, category) => { return acc.concat(Object.values(category)); }, []); // Define admin permissions first (without circular reference) const ADMIN_PERMISSIONS = [ // Basic admin permissions PERMISSIONS.USERS.VIEW, PERMISSIONS.USERS.EDIT, PERMISSIONS.USERS.VIEW_VERIFICATION, PERMISSIONS.USERS.APPROVE_VERIFICATION, PERMISSIONS.USERS.REJECT_VERIFICATION, PERMISSIONS.PRODUCTS.VIEW, PERMISSIONS.PRODUCTS.EDIT, PERMISSIONS.PRODUCTS.PUBLISH, PERMISSIONS.SERVICES.VIEW, PERMISSIONS.SERVICES.EDIT, PERMISSIONS.SERVICES.PUBLISH, PERMISSIONS.MAKEOVER.VIEW, PERMISSIONS.MAKEOVER.CREATE, PERMISSIONS.MAKEOVER.UPDATE, PERMISSIONS.MAKEOVER.DELETE, PERMISSIONS.BOOKINGS.VIEW, PERMISSIONS.BOOKINGS.EDIT, PERMISSIONS.BOOKINGS.CONFIRM, PERMISSIONS.BOOKINGS.COMPLETE, PERMISSIONS.BOOKINGS.VIEW_CALENDAR, PERMISSIONS.GALLERIES.VIEW, PERMISSIONS.GALLERIES.EDIT, PERMISSIONS.GALLERIES.PUBLISH, PERMISSIONS.MEDIA.VIEW, PERMISSIONS.MEDIA.UPLOAD, PERMISSIONS.MEDIA.EDIT, PERMISSIONS.REVIEWS.VIEW, PERMISSIONS.REVIEWS.MODERATE, PERMISSIONS.REVIEWS.APPROVE, PERMISSIONS.REVIEWS.REJECT, PERMISSIONS.NOTIFICATIONS.VIEW, PERMISSIONS.NOTIFICATIONS.SEND, PERMISSIONS.EMAIL.VIEW, PERMISSIONS.EMAIL.SEND, PERMISSIONS.SETTINGS.VIEW, PERMISSIONS.SETTINGS.EDIT, PERMISSIONS.ANALYTICS.VIEW_DASHBOARD, PERMISSIONS.ANALYTICS.VIEW_REVENUE, PERMISSIONS.ANALYTICS.VIEW_USER_ANALYTICS, PERMISSIONS.ANALYTICS.VIEW_BOOKING_ANALYTICS, PERMISSIONS.FINANCIAL.VIEW_REVENUE, PERMISSIONS.FINANCIAL.VIEW_PAYMENTS, PERMISSIONS.FINANCIAL.VIEW_INVOICES ]; // Role-based permission presets export const ROLE_PERMISSIONS = { admin: ADMIN_PERMISSIONS, manager: [ // Include all admin permissions ...ADMIN_PERMISSIONS, // Additional manager permissions PERMISSIONS.USERS.BLOCK, PERMISSIONS.USERS.UNBLOCK, PERMISSIONS.USERS.MANAGE_PERMISSIONS, PERMISSIONS.USERS.EXPORT_DATA, PERMISSIONS.ADMIN.VIEW, PERMISSIONS.ADMIN.CREATE, PERMISSIONS.ADMIN.EDIT, PERMISSIONS.ADMIN.VIEW_HIERARCHY, PERMISSIONS.ADMIN.CREATE_INVITES, PERMISSIONS.ADMIN.VERIFY_ADMINS, PERMISSIONS.ADMIN.VIEW_ACTIVITY, PERMISSIONS.PRODUCTS.CREATE, PERMISSIONS.PRODUCTS.DELETE, PERMISSIONS.PRODUCTS.MANAGE_CATEGORIES, PERMISSIONS.PRODUCTS.MANAGE_INVENTORY, PERMISSIONS.PRODUCTS.MANAGE_PRICING, PERMISSIONS.SERVICES.CREATE, PERMISSIONS.SERVICES.DELETE, PERMISSIONS.SERVICES.MANAGE_CATEGORIES, PERMISSIONS.SERVICES.MANAGE_PRICING, PERMISSIONS.MAKEOVER.MANAGE_OFFERS, PERMISSIONS.MAKEOVER.MANAGE_SESSIONS, PERMISSIONS.MAKEOVER.VIEW_ANALYTICS, PERMISSIONS.BOOKINGS.CREATE, PERMISSIONS.BOOKINGS.DELETE, PERMISSIONS.BOOKINGS.MANAGE_SCHEDULE, PERMISSIONS.BOOKINGS.MANAGE_CALENDAR, PERMISSIONS.BOOKINGS.EXPORT_DATA, PERMISSIONS.GALLERIES.CREATE, PERMISSIONS.GALLERIES.DELETE, PERMISSIONS.GALLERIES.MANAGE_CATEGORIES, PERMISSIONS.MEDIA.DELETE, PERMISSIONS.MEDIA.MANAGE_CATEGORIES, PERMISSIONS.MEDIA.MANAGE_STORAGE, PERMISSIONS.CAMPAIGNS.VIEW, PERMISSIONS.CAMPAIGNS.CREATE, PERMISSIONS.CAMPAIGNS.EDIT, PERMISSIONS.CAMPAIGNS.ACTIVATE, PERMISSIONS.CAMPAIGNS.DEACTIVATE, PERMISSIONS.ORDERS.VIEW, PERMISSIONS.ORDERS.EDIT, PERMISSIONS.ORDERS.PROCESS, PERMISSIONS.ORDERS.REFUND, PERMISSIONS.REVIEWS.DELETE, PERMISSIONS.REVIEWS.MANAGE_SETTINGS, PERMISSIONS.NOTIFICATIONS.CREATE, PERMISSIONS.NOTIFICATIONS.EDIT, PERMISSIONS.NOTIFICATIONS.MANAGE_TEMPLATES, PERMISSIONS.EMAIL.MANAGE_TEMPLATES, PERMISSIONS.EMAIL.MANAGE_SETTINGS, PERMISSIONS.SETTINGS.MANAGE_BRANDING, PERMISSIONS.SETTINGS.MANAGE_INTEGRATIONS, PERMISSIONS.SETTINGS.MANAGE_PAYMENTS, PERMISSIONS.ANALYTICS.VIEW_PRODUCT_ANALYTICS, PERMISSIONS.ANALYTICS.VIEW_CAMPAIGN_ANALYTICS, PERMISSIONS.ANALYTICS.EXPORT_REPORTS, PERMISSIONS.FINANCIAL.VIEW_REFUNDS, PERMISSIONS.FINANCIAL.VIEW_TAXES, PERMISSIONS.SECURITY.VIEW_LOGS, PERMISSIONS.SECURITY.VIEW_INCIDENTS, PERMISSIONS.SECURITY.VIEW_COMPLIANCE, PERMISSIONS.SYSTEM.VIEW_STATUS, PERMISSIONS.SYSTEM.VIEW_LOGS, PERMISSIONS.SYSTEM.VIEW_PERFORMANCE ], super_admin: [ // Include all permissions ...ALL_PERMISSIONS ] }; // Helper functions export const getPermissionsForRole = (role) => { return ROLE_PERMISSIONS[role] || []; }; export const roleHasPermission = (role, permission) => { const rolePermissions = getPermissionsForRole(role); return rolePermissions.includes(permission); }; export default PERMISSIONS;