widget cache
This commit is contained in:
parent
826ad8d775
commit
f71ae00eb5
60
lib/redis.ts
60
lib/redis.ts
@ -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);
|
||||||
};
|
};
|
||||||
Loading…
Reference in New Issue
Block a user