From 0bb4c8fca4159c3385bfb69edcfdf0145ed1800c Mon Sep 17 00:00:00 2001 From: alma Date: Sat, 3 May 2025 15:30:11 +0200 Subject: [PATCH] widget cache --- components/sidebar.tsx | 64 +++++++++++++++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 14 deletions(-) diff --git a/components/sidebar.tsx b/components/sidebar.tsx index e706bcf0..2e20b026 100644 --- a/components/sidebar.tsx +++ b/components/sidebar.tsx @@ -84,8 +84,13 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) { // Get user roles and normalize them properly const userRoles = Array.isArray(session.user.role) ? session.user.role : [session.user.role]; + + // Filter out technical/system roles that shouldn't count for permissions + const ignoredRoles = ['offline_access', 'uma_authorization', 'default-roles-cercle']; + const cleanUserRoles = userRoles .filter(Boolean) // Remove any null/undefined values + .filter(role => !ignoredRoles.includes(String(role))) // Filter out system roles .map(role => { if (typeof role !== 'string') return ''; return role @@ -99,8 +104,9 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) { // For debugging only if (process.env.NODE_ENV === 'development') { console.log(`Role check for: ${JSON.stringify(requiredRole)}`, { - userRoles: session.user.role, - cleanedUserRoles: cleanUserRoles + userRoles, + ignoredRoles, + cleanUserRoles, }); } @@ -111,13 +117,17 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) { .map(role => typeof role === 'string' ? role.toLowerCase() : '') .filter(role => role !== ''); - return cleanRequiredRoles.some(role => cleanUserRoles.includes(role)); + const hasRequiredRole = cleanRequiredRoles.some(role => cleanUserRoles.includes(role)); + console.log(`Array role check: Required ${JSON.stringify(cleanRequiredRoles)}, Has any: ${hasRequiredRole}`); + return hasRequiredRole; } // Check against single required role if (typeof requiredRole === 'string') { const cleanRequiredRole = requiredRole.toLowerCase(); - return cleanUserRoles.includes(cleanRequiredRole); + const hasRequiredRole = cleanUserRoles.includes(cleanRequiredRole); + console.log(`Single role check: Required "${cleanRequiredRole}", Has: ${hasRequiredRole}`); + return hasRequiredRole; } return false; @@ -209,7 +219,11 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) { // Combine base items with role-specific items based on user roles const visibleMenuItems = [ ...baseMenuItems, - ...roleSpecificItems.filter(item => hasRole(item.requiredRole)) + ...roleSpecificItems.filter(item => { + const isVisible = hasRole(item.requiredRole); + console.log(`Item ${item.title} with requiredRole ${JSON.stringify(item.requiredRole)} is ${isVisible ? 'visible' : 'hidden'}`); + return isVisible; + }) ]; const handleNavigation = (href: string, external?: boolean) => { @@ -293,15 +307,16 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
                       {JSON.stringify(
                         Array.isArray(session?.user?.role) 
-                          ? session.user.role.map(role => 
-                              typeof role === 'string' 
-                                ? role
-                                    .replace(/^\//, '')
-                                    .replace(/^ROLE_/i, '')
-                                    .replace(/^default-roles-[^/]*\//i, '')
-                                    .toLowerCase()
-                                : ''
-                            )
+                          ? session.user.role
+                              .filter(role => typeof role === 'string')
+                              .filter(role => !['offline_access', 'uma_authorization', 'default-roles-cercle'].includes(role))
+                              .map(role => 
+                                role
+                                  .replace(/^\//, '')
+                                  .replace(/^ROLE_/i, '')
+                                  .replace(/^default-roles-[^/]*\//i, '')
+                                  .toLowerCase()
+                              )
                           : []
                         , null, 2)}
                     
@@ -321,6 +336,27 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) { })} +
+ Visible Menu Items +
+

Base Items:

+
    + {baseMenuItems.map(item => ( +
  • {item.title}
  • + ))} +
+

Role-Specific Items (After Filtering):

+
    + {roleSpecificItems + .filter(item => hasRole(item.requiredRole)) + .map(item => ( +
  • {item.title}
  • + )) + } +
+

Total Visible Items: {visibleMenuItems.length}

+
+
)}