notifications
This commit is contained in:
parent
c7c20eda14
commit
1aa5b08093
@ -45,27 +45,10 @@ interface MenuItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function Sidebar({ isOpen, onClose }: SidebarProps) {
|
export function Sidebar({ isOpen, onClose }: SidebarProps) {
|
||||||
const { data: session, status, update } = useSession();
|
const { data: session, status } = useSession();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const pathname = usePathname();
|
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
|
// Show loading state while session is being checked
|
||||||
if (status === 'loading') {
|
if (status === 'loading') {
|
||||||
return null;
|
return null;
|
||||||
@ -85,7 +68,6 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
|
|||||||
|
|
||||||
// If no session or user roles, deny access
|
// If no session or user roles, deny access
|
||||||
if (!session?.user?.role) {
|
if (!session?.user?.role) {
|
||||||
console.log('No user roles found in session');
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,15 +90,6 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
|
|||||||
})
|
})
|
||||||
.filter(role => role !== ''); // Remove empty strings
|
.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
|
// Check against array of required roles
|
||||||
if (Array.isArray(requiredRole)) {
|
if (Array.isArray(requiredRole)) {
|
||||||
const cleanRequiredRoles = requiredRole
|
const cleanRequiredRoles = requiredRole
|
||||||
@ -124,17 +97,13 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
|
|||||||
.map(role => typeof role === 'string' ? role.toLowerCase() : '')
|
.map(role => typeof role === 'string' ? role.toLowerCase() : '')
|
||||||
.filter(role => role !== '');
|
.filter(role => role !== '');
|
||||||
|
|
||||||
const hasRequiredRole = cleanRequiredRoles.some(role => cleanUserRoles.includes(role));
|
return 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
|
// Check against single required role
|
||||||
if (typeof requiredRole === 'string') {
|
if (typeof requiredRole === 'string') {
|
||||||
const cleanRequiredRole = requiredRole.toLowerCase();
|
const cleanRequiredRole = requiredRole.toLowerCase();
|
||||||
const hasRequiredRole = cleanUserRoles.includes(cleanRequiredRole);
|
return cleanUserRoles.includes(cleanRequiredRole);
|
||||||
console.log(`Single role check: Required "${cleanRequiredRole}", Has: ${hasRequiredRole}`);
|
|
||||||
return hasRequiredRole;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -228,7 +197,6 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
|
|||||||
...baseMenuItems,
|
...baseMenuItems,
|
||||||
...roleSpecificItems.filter(item => {
|
...roleSpecificItems.filter(item => {
|
||||||
const isVisible = hasRole(item.requiredRole);
|
const isVisible = hasRole(item.requiredRole);
|
||||||
console.log(`Item ${item.title} with requiredRole ${JSON.stringify(item.requiredRole)} is ${isVisible ? 'visible' : 'hidden'}`);
|
|
||||||
return isVisible;
|
return isVisible;
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
@ -277,14 +245,6 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
|
|||||||
height={16.5}
|
height={16.5}
|
||||||
className="text-black"
|
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>
|
</div>
|
||||||
|
|
||||||
{/* Menu Items */}
|
{/* Menu Items */}
|
||||||
@ -303,63 +263,6 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
|
|||||||
<span>{item.title}</span>
|
<span>{item.title}</span>
|
||||||
</Button>
|
</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>
|
</div>
|
||||||
</ScrollArea>
|
</ScrollArea>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user