widget cache

This commit is contained in:
alma 2025-05-03 15:24:15 +02:00
parent f71ae00eb5
commit 3c2a56a7a2
3 changed files with 60 additions and 77 deletions

View File

@ -11,7 +11,7 @@ const menuItems = {
} }
export default async function SectionPage({ params }: { params: { section: string } }) { export default async function SectionPage({ params }: { params: { section: string } }) {
const { section } = params; const section = params.section;
const iframeUrl = menuItems[section as keyof typeof menuItems] const iframeUrl = menuItems[section as keyof typeof menuItems]
if (!iframeUrl) { if (!iframeUrl) {

View File

@ -71,46 +71,56 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
// Function to check if user has a specific role // Function to check if user has a specific role
const hasRole = (requiredRole: string | string[] | undefined) => { const hasRole = (requiredRole: string | string[] | undefined) => {
if (!requiredRole || !session?.user?.role) { // If no role is required, allow access
console.log('No required role or user roles found', { if (!requiredRole) {
requiredRole, return true;
userRoles: session?.user?.role }
});
// If no session or user roles, deny access
if (!session?.user?.role) {
console.log('No user roles found in session');
return false; return false;
} }
// 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 => role.toLowerCase()); const cleanUserRoles = userRoles
.filter(Boolean) // Remove any null/undefined values
.map(role => {
if (typeof role !== 'string') return '';
return 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();
})
.filter(role => role !== ''); // Remove empty strings
console.log('Debug roles:', { // For debugging only
rawUserRoles: session.user.role, if (process.env.NODE_ENV === 'development') {
processedUserRoles: cleanUserRoles, console.log(`Role check for: ${JSON.stringify(requiredRole)}`, {
requiredRole, userRoles: session.user.role,
pathname cleanedUserRoles: cleanUserRoles
});
// If requiredRole is an array, check if user has any of the roles
if (Array.isArray(requiredRole)) {
const cleanRequiredRoles = requiredRole.map(role => role.toLowerCase());
console.log('Checking multiple roles:', {
requiredRoles: requiredRole,
cleanRequiredRoles,
userRoles: cleanUserRoles,
hasAnyRole: cleanRequiredRoles.some(role => cleanUserRoles.includes(role)),
matchingRoles: cleanRequiredRoles.filter(role => cleanUserRoles.includes(role))
}); });
}
// Check against array of required roles
if (Array.isArray(requiredRole)) {
const cleanRequiredRoles = requiredRole
.filter(Boolean)
.map(role => typeof role === 'string' ? role.toLowerCase() : '')
.filter(role => role !== '');
return cleanRequiredRoles.some(role => cleanUserRoles.includes(role)); return cleanRequiredRoles.some(role => cleanUserRoles.includes(role));
} }
// For single role requirement // Check against single required role
const cleanRequiredRole = requiredRole.toLowerCase(); if (typeof requiredRole === 'string') {
console.log('Checking single role:', { const cleanRequiredRole = requiredRole.toLowerCase();
requiredRole, return cleanUserRoles.includes(cleanRequiredRole);
cleanRequiredRole, }
userRoles: cleanUserRoles,
hasRole: cleanUserRoles.includes(cleanRequiredRole) return false;
});
return cleanUserRoles.includes(cleanRequiredRole);
}; };
// Base menu items (available for everyone) // Base menu items (available for everyone)
@ -264,6 +274,23 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
<span>{item.title}</span> <span>{item.title}</span>
</Button> </Button>
))} ))}
{/* Debug display only in development */}
{process.env.NODE_ENV === 'development' && (
<div className="p-2 mt-4 border border-gray-200 rounded bg-blue-50 text-xs">
<p className="font-bold">Debug Info:</p>
<div className="mt-1">
<p>User: {session?.user?.name}</p>
<p>Email: {session?.user?.email}</p>
<details>
<summary className="cursor-pointer">User Roles</summary>
<pre className="mt-1 p-1 bg-white text-[10px] overflow-x-auto">
{JSON.stringify(session?.user?.role, null, 2)}
</pre>
</details>
</div>
</div>
)}
</div> </div>
</ScrollArea> </ScrollArea>
</div> </div>

View File

@ -727,48 +727,4 @@ export async function invalidateMessagesCache(
} catch (error) { } catch (error) {
console.error(`Error invalidating messages cache for user ${userId}:`, error); console.error(`Error invalidating messages cache for user ${userId}:`, error);
} }
} }
const hasRole = (requiredRole: string | string[] | undefined) => {
// If no role is required, don't restrict access
if (!requiredRole) {
return true;
}
// If no session or user roles, deny access
if (!session?.user?.role) {
console.log('No user roles found in session');
return false;
}
// Get user roles and normalize them properly
const userRoles = Array.isArray(session.user.role) ? session.user.role : [session.user.role];
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()
);
// Log for debugging
console.log('Debug roles in sidebar:', {
requiredRole,
userRoles: session.user.role,
cleanedUserRoles: cleanUserRoles
});
// Check array of required roles
if (Array.isArray(requiredRole)) {
const cleanRequiredRoles = requiredRole
.filter(role => typeof role === 'string')
.map(role => role.toLowerCase());
return cleanRequiredRoles.some(role => cleanUserRoles.includes(role));
}
// Check single required role
const cleanRequiredRole = requiredRole.toLowerCase();
return cleanUserRoles.includes(cleanRequiredRole);
};