import { UserRole } from '@prisma/client'; const ROLE_PRIORITY: Record = { SUPER_ADMIN: 5, INFLUENCE_ADMIN: 4, MAP_ADMIN: 4, BROADCAST_ADMIN: 4, CONTENT_ADMIN: 4, MEDIA_ADMIN: 4, PAYMENTS_ADMIN: 4, EVENTS_ADMIN: 4, SOCIAL_ADMIN: 4, POLLS_ADMIN: 4, ANALYTICS_ADMIN: 4, USER: 2, TEMP: 1, }; /** All admin roles (any user with one of these can access /app) */ export const ADMIN_ROLES: UserRole[] = [ UserRole.SUPER_ADMIN, UserRole.INFLUENCE_ADMIN, UserRole.MAP_ADMIN, UserRole.BROADCAST_ADMIN, UserRole.CONTENT_ADMIN, UserRole.MEDIA_ADMIN, UserRole.PAYMENTS_ADMIN, UserRole.EVENTS_ADMIN, UserRole.SOCIAL_ADMIN, UserRole.POLLS_ADMIN, UserRole.ANALYTICS_ADMIN, ]; // Module-specific role groups export const INFLUENCE_ROLES: UserRole[] = [UserRole.SUPER_ADMIN, UserRole.INFLUENCE_ADMIN]; export const MAP_ROLES: UserRole[] = [UserRole.SUPER_ADMIN, UserRole.MAP_ADMIN]; export const BROADCAST_ROLES: UserRole[] = [UserRole.SUPER_ADMIN, UserRole.BROADCAST_ADMIN]; export const CONTENT_ROLES: UserRole[] = [UserRole.SUPER_ADMIN, UserRole.CONTENT_ADMIN]; export const MEDIA_ROLES: UserRole[] = [UserRole.SUPER_ADMIN, UserRole.MEDIA_ADMIN]; export const PAYMENTS_ROLES: UserRole[] = [UserRole.SUPER_ADMIN, UserRole.PAYMENTS_ADMIN]; export const EVENTS_ROLES: UserRole[] = [UserRole.SUPER_ADMIN, UserRole.EVENTS_ADMIN]; export const SOCIAL_ROLES: UserRole[] = [UserRole.SUPER_ADMIN, UserRole.SOCIAL_ADMIN]; export const SYSTEM_ROLES: UserRole[] = [UserRole.SUPER_ADMIN]; export const SCHEDULING_ROLES: UserRole[] = [UserRole.SUPER_ADMIN, UserRole.MAP_ADMIN, UserRole.EVENTS_ADMIN]; export const POLLS_ROLES: UserRole[] = [UserRole.SUPER_ADMIN, UserRole.POLLS_ADMIN, UserRole.INFLUENCE_ADMIN]; export const ANALYTICS_ROLES: UserRole[] = [UserRole.SUPER_ADMIN, UserRole.ANALYTICS_ADMIN]; /** Check if the user has any of the specified roles */ export function hasAnyRole(user: { roles?: unknown; role?: UserRole }, roles: UserRole[]): boolean { const userRoles = getUserRoles(user); return userRoles.some(r => roles.includes(r)); } /** Check if user has any admin role */ export function isAdmin(user: { roles?: unknown; role?: UserRole }): boolean { return hasAnyRole(user, ADMIN_ROLES); } /** Get the primary (highest-priority) role from a roles array */ export function getPrimaryRole(roles: UserRole[]): UserRole { if (roles.length === 0) return UserRole.USER; return roles.reduce((highest, current) => (ROLE_PRIORITY[current] || 0) > (ROLE_PRIORITY[highest] || 0) ? current : highest ); } /** Safely extract UserRole[] from a user object (handles old single-role and new multi-role) */ export function getUserRoles(user: { roles?: unknown; role?: UserRole }): UserRole[] { if (Array.isArray(user.roles) && user.roles.length > 0) { return user.roles as UserRole[]; } if (user.role) return [user.role]; return [UserRole.USER]; }