widget cache

This commit is contained in:
alma 2025-05-03 15:20:01 +02:00
parent 826ad8d775
commit f71ae00eb5

View File

@ -730,57 +730,45 @@ export async function invalidateMessagesCache(
} }
const hasRole = (requiredRole: string | string[] | undefined) => { const hasRole = (requiredRole: string | string[] | undefined) => {
// Early returns for invalid cases // If no role is required, don't restrict access
if (!requiredRole) { if (!requiredRole) {
console.log('No required role specified'); return true;
return false;
} }
// If no session or user roles, deny access
if (!session?.user?.role) { if (!session?.user?.role) {
console.log('No user roles found'); console.log('No user roles found in session');
return false; 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 userRoles = Array.isArray(session.user.role) ? session.user.role : [session.user.role];
const cleanUserRoles = userRoles.map(role => typeof role === 'string' ? const cleanUserRoles = userRoles
role.replace(/^[\/]/, '') // Remove leading slash .filter(role => typeof role === 'string')
.replace(/^ROLE_/, '') // Remove ROLE_ prefix .map(role => role
.replace(/^default-roles-[^/]*\//i, '') // Remove realm prefix .replace(/^\//, '') // Remove leading slash
.toLowerCase() .replace(/^ROLE_/i, '') // Remove ROLE_ prefix, case insensitive
: '').filter(Boolean); .replace(/^default-roles-[^/]*\//i, '') // Remove realm prefix like default-roles-cercle/
.toLowerCase()
);
console.log('Debug roles:', { // Log for debugging
rawUserRoles: session.user.role, console.log('Debug roles in sidebar:', {
processedUserRoles: cleanUserRoles, requiredRole,
requiredRole userRoles: session.user.role,
cleanedUserRoles: cleanUserRoles
}); });
// Check against array of required roles // Check array of required roles
if (Array.isArray(requiredRole)) { if (Array.isArray(requiredRole)) {
const cleanRequiredRoles = requiredRole.map(role => const cleanRequiredRoles = requiredRole
typeof role === 'string' ? role.toLowerCase() : '' .filter(role => typeof role === 'string')
).filter(Boolean); .map(role => role.toLowerCase());
console.log('Checking multiple roles:', {
requiredRoles: requiredRole,
cleanRequiredRoles,
userRoles: cleanUserRoles,
hasAnyRole: cleanRequiredRoles.some(role => cleanUserRoles.includes(role))
});
return cleanRequiredRoles.some(role => cleanUserRoles.includes(role)); return cleanRequiredRoles.some(role => cleanUserRoles.includes(role));
} }
// Check against single required role // Check single required role
const cleanRequiredRole = typeof requiredRole === 'string' ? requiredRole.toLowerCase() : ''; const cleanRequiredRole = requiredRole.toLowerCase();
console.log('Checking single role:', {
requiredRole,
cleanRequiredRole,
userRoles: cleanUserRoles,
hasRole: cleanUserRoles.includes(cleanRequiredRole)
});
return cleanUserRoles.includes(cleanRequiredRole); return cleanUserRoles.includes(cleanRequiredRole);
}; };