widget cache

This commit is contained in:
alma 2025-05-03 15:30:11 +02:00
parent 5873b7276c
commit 0bb4c8fca4

View File

@ -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) {
<pre className="mt-1 p-1 bg-white text-[10px] overflow-x-auto">
{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)}
</pre>
@ -321,6 +336,27 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
})}
</div>
</details>
<details>
<summary className="cursor-pointer">Visible Menu Items</summary>
<div className="mt-1 p-1 bg-white text-[10px] overflow-x-auto">
<h3 className="font-bold">Base Items:</h3>
<ul className="list-disc pl-3">
{baseMenuItems.map(item => (
<li key={item.title}>{item.title}</li>
))}
</ul>
<h3 className="font-bold mt-2">Role-Specific Items (After Filtering):</h3>
<ul className="list-disc pl-3">
{roleSpecificItems
.filter(item => hasRole(item.requiredRole))
.map(item => (
<li key={item.title}>{item.title}</li>
))
}
</ul>
<h3 className="font-bold mt-2">Total Visible Items: {visibleMenuItems.length}</h3>
</div>
</details>
</div>
</div>
)}