| import { roleDefaults, SystemRoles } from 'librechat-data-provider'; |
|
|
| |
| export function createRoleMethods(mongoose: typeof import('mongoose')) { |
| |
| |
| |
| |
| |
| async function initializeRoles() { |
| const Role = mongoose.models.Role; |
|
|
| for (const roleName of [SystemRoles.ADMIN, SystemRoles.USER]) { |
| let role = await Role.findOne({ name: roleName }); |
| const defaultPerms = roleDefaults[roleName].permissions; |
|
|
| if (!role) { |
| role = new Role(roleDefaults[roleName]); |
| } else { |
| const permissions = role.toObject()?.permissions ?? {}; |
| role.permissions = role.permissions || {}; |
| for (const permType of Object.keys(defaultPerms)) { |
| if (permissions[permType] == null || Object.keys(permissions[permType]).length === 0) { |
| role.permissions[permType] = defaultPerms[permType as keyof typeof defaultPerms]; |
| } |
| } |
| } |
| await role.save(); |
| } |
| } |
|
|
| |
| |
| |
| |
| async function listRoles() { |
| const Role = mongoose.models.Role; |
| return await Role.find({}).select('name permissions').lean(); |
| } |
|
|
| |
| return { |
| listRoles, |
| initializeRoles, |
| }; |
| } |
|
|
| export type RoleMethods = ReturnType<typeof createRoleMethods>; |
|
|