48 lines
1.0 KiB
TypeScript
48 lines
1.0 KiB
TypeScript
|
|
import type { AuthUser, PermissionKey } from "@mrp/shared";
|
||
|
|
|
||
|
|
import { prisma } from "./prisma.js";
|
||
|
|
|
||
|
|
export async function getCurrentUserById(userId: string): Promise<AuthUser | null> {
|
||
|
|
const user = await prisma.user.findUnique({
|
||
|
|
where: { id: userId },
|
||
|
|
include: {
|
||
|
|
userRoles: {
|
||
|
|
include: {
|
||
|
|
role: {
|
||
|
|
include: {
|
||
|
|
rolePermissions: {
|
||
|
|
include: {
|
||
|
|
permission: true,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
});
|
||
|
|
|
||
|
|
if (!user) {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
const permissionKeys = new Set<PermissionKey>();
|
||
|
|
const roleNames = user.userRoles.map(({ role }) => {
|
||
|
|
for (const rolePermission of role.rolePermissions) {
|
||
|
|
permissionKeys.add(rolePermission.permission.key as PermissionKey);
|
||
|
|
}
|
||
|
|
|
||
|
|
return role.name;
|
||
|
|
});
|
||
|
|
|
||
|
|
return {
|
||
|
|
id: user.id,
|
||
|
|
email: user.email,
|
||
|
|
firstName: user.firstName,
|
||
|
|
lastName: user.lastName,
|
||
|
|
roles: roleNames,
|
||
|
|
permissions: [...permissionKeys],
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|