widget cache
This commit is contained in:
parent
f71ae00eb5
commit
3c2a56a7a2
@ -11,7 +11,7 @@ const menuItems = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default async function SectionPage({ params }: { params: { section: string } }) {
|
export default async function SectionPage({ params }: { params: { section: string } }) {
|
||||||
const { section } = params;
|
const section = params.section;
|
||||||
const iframeUrl = menuItems[section as keyof typeof menuItems]
|
const iframeUrl = menuItems[section as keyof typeof menuItems]
|
||||||
|
|
||||||
if (!iframeUrl) {
|
if (!iframeUrl) {
|
||||||
|
|||||||
@ -71,46 +71,56 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
|
|||||||
|
|
||||||
// Function to check if user has a specific role
|
// Function to check if user has a specific role
|
||||||
const hasRole = (requiredRole: string | string[] | undefined) => {
|
const hasRole = (requiredRole: string | string[] | undefined) => {
|
||||||
if (!requiredRole || !session?.user?.role) {
|
// If no role is required, allow access
|
||||||
console.log('No required role or user roles found', {
|
if (!requiredRole) {
|
||||||
requiredRole,
|
return true;
|
||||||
userRoles: session?.user?.role
|
}
|
||||||
});
|
|
||||||
|
// If no session or user roles, deny access
|
||||||
|
if (!session?.user?.role) {
|
||||||
|
console.log('No user roles found in session');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get user roles and normalize them properly
|
||||||
const userRoles = Array.isArray(session.user.role) ? session.user.role : [session.user.role];
|
const userRoles = Array.isArray(session.user.role) ? session.user.role : [session.user.role];
|
||||||
const cleanUserRoles = userRoles.map(role => role.toLowerCase());
|
const cleanUserRoles = userRoles
|
||||||
|
.filter(Boolean) // Remove any null/undefined values
|
||||||
|
.map(role => {
|
||||||
|
if (typeof role !== 'string') return '';
|
||||||
|
return role
|
||||||
|
.replace(/^\//, '') // Remove leading slash
|
||||||
|
.replace(/^ROLE_/i, '') // Remove ROLE_ prefix, case insensitive
|
||||||
|
.replace(/^default-roles-[^/]*\//i, '') // Remove realm prefix like default-roles-cercle/
|
||||||
|
.toLowerCase();
|
||||||
|
})
|
||||||
|
.filter(role => role !== ''); // Remove empty strings
|
||||||
|
|
||||||
console.log('Debug roles:', {
|
// For debugging only
|
||||||
rawUserRoles: session.user.role,
|
if (process.env.NODE_ENV === 'development') {
|
||||||
processedUserRoles: cleanUserRoles,
|
console.log(`Role check for: ${JSON.stringify(requiredRole)}`, {
|
||||||
requiredRole,
|
userRoles: session.user.role,
|
||||||
pathname
|
cleanedUserRoles: cleanUserRoles
|
||||||
});
|
|
||||||
|
|
||||||
// If requiredRole is an array, check if user has any of the roles
|
|
||||||
if (Array.isArray(requiredRole)) {
|
|
||||||
const cleanRequiredRoles = requiredRole.map(role => role.toLowerCase());
|
|
||||||
console.log('Checking multiple roles:', {
|
|
||||||
requiredRoles: requiredRole,
|
|
||||||
cleanRequiredRoles,
|
|
||||||
userRoles: cleanUserRoles,
|
|
||||||
hasAnyRole: cleanRequiredRoles.some(role => cleanUserRoles.includes(role)),
|
|
||||||
matchingRoles: cleanRequiredRoles.filter(role => cleanUserRoles.includes(role))
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check against array of required roles
|
||||||
|
if (Array.isArray(requiredRole)) {
|
||||||
|
const cleanRequiredRoles = requiredRole
|
||||||
|
.filter(Boolean)
|
||||||
|
.map(role => typeof role === 'string' ? role.toLowerCase() : '')
|
||||||
|
.filter(role => role !== '');
|
||||||
|
|
||||||
return cleanRequiredRoles.some(role => cleanUserRoles.includes(role));
|
return cleanRequiredRoles.some(role => cleanUserRoles.includes(role));
|
||||||
}
|
}
|
||||||
|
|
||||||
// For single role requirement
|
// Check against single required role
|
||||||
const cleanRequiredRole = requiredRole.toLowerCase();
|
if (typeof requiredRole === 'string') {
|
||||||
console.log('Checking single role:', {
|
const cleanRequiredRole = requiredRole.toLowerCase();
|
||||||
requiredRole,
|
return cleanUserRoles.includes(cleanRequiredRole);
|
||||||
cleanRequiredRole,
|
}
|
||||||
userRoles: cleanUserRoles,
|
|
||||||
hasRole: cleanUserRoles.includes(cleanRequiredRole)
|
return false;
|
||||||
});
|
|
||||||
return cleanUserRoles.includes(cleanRequiredRole);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Base menu items (available for everyone)
|
// Base menu items (available for everyone)
|
||||||
@ -264,6 +274,23 @@ 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>
|
||||||
|
<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>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</ScrollArea>
|
</ScrollArea>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
46
lib/redis.ts
46
lib/redis.ts
@ -727,48 +727,4 @@ export async function invalidateMessagesCache(
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`Error invalidating messages cache for user ${userId}:`, error);
|
console.error(`Error invalidating messages cache for user ${userId}:`, error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const hasRole = (requiredRole: string | string[] | undefined) => {
|
|
||||||
// If no role is required, don't restrict access
|
|
||||||
if (!requiredRole) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If no session or user roles, deny access
|
|
||||||
if (!session?.user?.role) {
|
|
||||||
console.log('No user roles found in session');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get user roles and normalize them properly
|
|
||||||
const userRoles = Array.isArray(session.user.role) ? session.user.role : [session.user.role];
|
|
||||||
const cleanUserRoles = userRoles
|
|
||||||
.filter(role => typeof role === 'string')
|
|
||||||
.map(role => role
|
|
||||||
.replace(/^\//, '') // Remove leading slash
|
|
||||||
.replace(/^ROLE_/i, '') // Remove ROLE_ prefix, case insensitive
|
|
||||||
.replace(/^default-roles-[^/]*\//i, '') // Remove realm prefix like default-roles-cercle/
|
|
||||||
.toLowerCase()
|
|
||||||
);
|
|
||||||
|
|
||||||
// Log for debugging
|
|
||||||
console.log('Debug roles in sidebar:', {
|
|
||||||
requiredRole,
|
|
||||||
userRoles: session.user.role,
|
|
||||||
cleanedUserRoles: cleanUserRoles
|
|
||||||
});
|
|
||||||
|
|
||||||
// Check array of required roles
|
|
||||||
if (Array.isArray(requiredRole)) {
|
|
||||||
const cleanRequiredRoles = requiredRole
|
|
||||||
.filter(role => typeof role === 'string')
|
|
||||||
.map(role => role.toLowerCase());
|
|
||||||
|
|
||||||
return cleanRequiredRoles.some(role => cleanUserRoles.includes(role));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check single required role
|
|
||||||
const cleanRequiredRole = requiredRole.toLowerCase();
|
|
||||||
return cleanUserRoles.includes(cleanRequiredRole);
|
|
||||||
};
|
|
||||||
Loading…
Reference in New Issue
Block a user