notifications

This commit is contained in:
alma 2025-05-04 12:29:19 +02:00
parent c7c20eda14
commit 1aa5b08093

View File

@ -45,27 +45,10 @@ interface MenuItem {
}
export function Sidebar({ isOpen, onClose }: SidebarProps) {
const { data: session, status, update } = useSession();
const { data: session, status } = useSession();
const router = useRouter();
const pathname = usePathname();
// Debug session data
console.log('Session state:', {
status,
hasSession: !!session,
user: session?.user,
roles: session?.user?.role,
rawRoles: session?.user?.role,
pathname
});
// Function to manually refresh the session from the server
const refreshSession = async () => {
console.log('Manually refreshing session...');
await update(); // Force update the session
console.log('Session refreshed!');
};
// Show loading state while session is being checked
if (status === 'loading') {
return null;
@ -85,7 +68,6 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
// If no session or user roles, deny access
if (!session?.user?.role) {
console.log('No user roles found in session');
return false;
}
@ -108,15 +90,6 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
})
.filter(role => role !== ''); // Remove empty strings
// For debugging only
if (process.env.NODE_ENV === 'development') {
console.log(`Role check for: ${JSON.stringify(requiredRole)}`, {
userRoles,
ignoredRoles,
cleanUserRoles,
});
}
// Check against array of required roles
if (Array.isArray(requiredRole)) {
const cleanRequiredRoles = requiredRole
@ -124,17 +97,13 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
.map(role => typeof role === 'string' ? role.toLowerCase() : '')
.filter(role => role !== '');
const hasRequiredRole = cleanRequiredRoles.some(role => cleanUserRoles.includes(role));
console.log(`Array role check: Required ${JSON.stringify(cleanRequiredRoles)}, Has any: ${hasRequiredRole}`);
return hasRequiredRole;
return cleanRequiredRoles.some(role => cleanUserRoles.includes(role));
}
// Check against single required role
if (typeof requiredRole === 'string') {
const cleanRequiredRole = requiredRole.toLowerCase();
const hasRequiredRole = cleanUserRoles.includes(cleanRequiredRole);
console.log(`Single role check: Required "${cleanRequiredRole}", Has: ${hasRequiredRole}`);
return hasRequiredRole;
return cleanUserRoles.includes(cleanRequiredRole);
}
return false;
@ -228,7 +197,6 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
...baseMenuItems,
...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;
})
];
@ -277,14 +245,6 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
height={16.5}
className="text-black"
/>
{/* Add session refresh button */}
<button
onClick={refreshSession}
className="absolute right-2 top-6 bg-blue-500 text-white rounded-full p-1 hover:bg-blue-600"
title="Refresh session data"
>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/><path d="M3 21v-5h5"/></svg>
</button>
</div>
{/* Menu Items */}
@ -303,63 +263,6 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
<span>{item.title}</span>
</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>
<button
onClick={refreshSession}
className="mt-1 w-full py-1 bg-blue-500 text-white rounded hover:bg-blue-600"
>
Refresh Session Data
</button>
<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>
<details>
<summary className="cursor-pointer">Normalized Roles</summary>
<pre className="mt-1 p-1 bg-white text-[10px] overflow-x-auto">
{JSON.stringify(
Array.isArray(session?.user?.role)
? 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>
</details>
<details>
<summary className="cursor-pointer">Role-Based Items</summary>
<div className="mt-1 p-1 bg-white text-[10px] overflow-x-auto">
{roleSpecificItems.map(item => {
const isVisible = hasRole(item.requiredRole);
return (
<div key={item.title} className="mb-1 pb-1 border-b">
<p><strong>Item:</strong> {item.title}</p>
<p><strong>Required Role:</strong> {JSON.stringify(item.requiredRole)}</p>
<p><strong>Visible:</strong> {isVisible ? '✅' : '❌'}</p>
</div>
);
})}
</div>
</details>
</div>
</div>
)}
</div>
</ScrollArea>
</div>