session correction sidebar items 3
This commit is contained in:
parent
211112d235
commit
932ee9f94c
@ -88,11 +88,18 @@ export const authOptions: NextAuthOptions = {
|
||||
clientSecret: getRequiredEnvVar("KEYCLOAK_CLIENT_SECRET"),
|
||||
issuer: getRequiredEnvVar("KEYCLOAK_ISSUER"),
|
||||
profile(profile) {
|
||||
console.log('Keycloak profile:', {
|
||||
rawRoles: profile.roles,
|
||||
profile
|
||||
});
|
||||
|
||||
// Clean up roles by removing ROLE_ prefix and converting to lowercase
|
||||
const cleanRoles = (profile.roles ?? []).map(role =>
|
||||
role.replace(/^ROLE_/, '').toLowerCase()
|
||||
);
|
||||
|
||||
console.log('Cleaned roles:', cleanRoles);
|
||||
|
||||
return {
|
||||
id: profile.sub,
|
||||
name: profile.name ?? profile.preferred_username,
|
||||
@ -113,11 +120,18 @@ export const authOptions: NextAuthOptions = {
|
||||
async jwt({ token, account, profile }) {
|
||||
if (account && profile) {
|
||||
const keycloakProfile = profile as KeycloakProfile;
|
||||
console.log('JWT callback profile:', {
|
||||
rawRoles: keycloakProfile.roles,
|
||||
profile: keycloakProfile
|
||||
});
|
||||
|
||||
// Clean up roles by removing ROLE_ prefix and converting to lowercase
|
||||
const cleanRoles = (keycloakProfile.roles ?? []).map(role =>
|
||||
role.replace(/^ROLE_/, '').toLowerCase()
|
||||
);
|
||||
|
||||
console.log('JWT cleaned roles:', cleanRoles);
|
||||
|
||||
token.accessToken = account.access_token ?? '';
|
||||
token.refreshToken = account.refresh_token ?? '';
|
||||
token.accessTokenExpires = account.expires_at ?? 0;
|
||||
@ -139,6 +153,11 @@ export const authOptions: NextAuthOptions = {
|
||||
throw new Error(token.error);
|
||||
}
|
||||
|
||||
console.log('Session callback:', {
|
||||
tokenRoles: token.role,
|
||||
session
|
||||
});
|
||||
|
||||
session.user = {
|
||||
id: token.sub ?? '',
|
||||
email: token.email ?? null,
|
||||
|
||||
@ -71,12 +71,22 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
|
||||
// Function to check if user has a specific role
|
||||
const hasRole = (requiredRole: string | string[] | undefined) => {
|
||||
if (!requiredRole || !session?.user?.role) {
|
||||
console.log('No required role or user roles found');
|
||||
console.log('No required role or user roles found', {
|
||||
requiredRole,
|
||||
userRoles: session?.user?.role
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
const userRoles = Array.isArray(session.user.role) ? session.user.role : [session.user.role];
|
||||
console.log('User roles:', userRoles);
|
||||
const cleanUserRoles = userRoles.map(role => role.toLowerCase());
|
||||
|
||||
console.log('Debug roles:', {
|
||||
rawUserRoles: session.user.role,
|
||||
processedUserRoles: cleanUserRoles,
|
||||
requiredRole,
|
||||
pathname
|
||||
});
|
||||
|
||||
// If requiredRole is an array, check if user has any of the roles
|
||||
if (Array.isArray(requiredRole)) {
|
||||
@ -84,10 +94,11 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
|
||||
console.log('Checking multiple roles:', {
|
||||
requiredRoles: requiredRole,
|
||||
cleanRequiredRoles,
|
||||
hasAnyRole: cleanRequiredRoles.some(role => userRoles.includes(role)),
|
||||
matchingRoles: cleanRequiredRoles.filter(role => userRoles.includes(role))
|
||||
userRoles: cleanUserRoles,
|
||||
hasAnyRole: cleanRequiredRoles.some(role => cleanUserRoles.includes(role)),
|
||||
matchingRoles: cleanRequiredRoles.filter(role => cleanUserRoles.includes(role))
|
||||
});
|
||||
return cleanRequiredRoles.some(role => userRoles.includes(role));
|
||||
return cleanRequiredRoles.some(role => cleanUserRoles.includes(role));
|
||||
}
|
||||
|
||||
// For single role requirement
|
||||
@ -95,9 +106,10 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) {
|
||||
console.log('Checking single role:', {
|
||||
requiredRole,
|
||||
cleanRequiredRole,
|
||||
hasRole: userRoles.includes(cleanRequiredRole)
|
||||
userRoles: cleanUserRoles,
|
||||
hasRole: cleanUserRoles.includes(cleanRequiredRole)
|
||||
});
|
||||
return userRoles.includes(cleanRequiredRole);
|
||||
return cleanUserRoles.includes(cleanRequiredRole);
|
||||
};
|
||||
|
||||
// Base menu items (available for everyone)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user