widget cache
This commit is contained in:
parent
5873b7276c
commit
0bb4c8fca4
@ -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>
|
||||
)}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user