diff --git a/lib/redis.ts b/lib/redis.ts index d4254fe4..0528b8f6 100644 --- a/lib/redis.ts +++ b/lib/redis.ts @@ -730,57 +730,45 @@ export async function invalidateMessagesCache( } const hasRole = (requiredRole: string | string[] | undefined) => { - // Early returns for invalid cases + // If no role is required, don't restrict access if (!requiredRole) { - console.log('No required role specified'); - return false; + return true; } + // If no session or user roles, deny access if (!session?.user?.role) { - console.log('No user roles found'); + console.log('No user roles found in session'); return false; } - // Extract user roles and normalize them consistently + // Get user roles and normalize them properly const userRoles = Array.isArray(session.user.role) ? session.user.role : [session.user.role]; - const cleanUserRoles = userRoles.map(role => typeof role === 'string' ? - role.replace(/^[\/]/, '') // Remove leading slash - .replace(/^ROLE_/, '') // Remove ROLE_ prefix - .replace(/^default-roles-[^/]*\//i, '') // Remove realm prefix - .toLowerCase() - : '').filter(Boolean); + const cleanUserRoles = userRoles + .filter(role => typeof role === 'string') + .map(role => role + .replace(/^\//, '') // Remove leading slash + .replace(/^ROLE_/i, '') // Remove ROLE_ prefix, case insensitive + .replace(/^default-roles-[^/]*\//i, '') // Remove realm prefix like default-roles-cercle/ + .toLowerCase() + ); - console.log('Debug roles:', { - rawUserRoles: session.user.role, - processedUserRoles: cleanUserRoles, - requiredRole + // Log for debugging + console.log('Debug roles in sidebar:', { + requiredRole, + userRoles: session.user.role, + cleanedUserRoles: cleanUserRoles }); - // Check against array of required roles + // Check array of required roles if (Array.isArray(requiredRole)) { - const cleanRequiredRoles = requiredRole.map(role => - typeof role === 'string' ? role.toLowerCase() : '' - ).filter(Boolean); - - console.log('Checking multiple roles:', { - requiredRoles: requiredRole, - cleanRequiredRoles, - userRoles: cleanUserRoles, - hasAnyRole: cleanRequiredRoles.some(role => cleanUserRoles.includes(role)) - }); + const cleanRequiredRoles = requiredRole + .filter(role => typeof role === 'string') + .map(role => role.toLowerCase()); return cleanRequiredRoles.some(role => cleanUserRoles.includes(role)); } - // Check against single required role - const cleanRequiredRole = typeof requiredRole === 'string' ? requiredRole.toLowerCase() : ''; - - console.log('Checking single role:', { - requiredRole, - cleanRequiredRole, - userRoles: cleanUserRoles, - hasRole: cleanUserRoles.includes(cleanRequiredRole) - }); - + // Check single required role + const cleanRequiredRole = requiredRole.toLowerCase(); return cleanUserRoles.includes(cleanRequiredRole); }; \ No newline at end of file