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