@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
JavaScript
// 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;