notifications
This commit is contained in:
parent
c7c20eda14
commit
1aa5b08093
@ -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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user