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) {
})}
+