| | 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>; |
| |
|