feat: add description field to Role model

- Add description to IRole, CreateRoleRequest, UpdateRoleRequest types
- Add description field to Mongoose roleSchema (default: '')
- Wire description through createRoleHandler and updateRoleHandler
- Include description in listRoles select clause so it appears in list
This commit is contained in:
Dustin Healy 2026-03-25 10:51:09 -07:00
parent f947546fea
commit afda763bcd
4 changed files with 11 additions and 2 deletions

View file

@ -79,8 +79,9 @@ export function createAdminRolesHandlers(deps: AdminRolesDeps) {
async function createRoleHandler(req: ServerRequest, res: Response) {
try {
const { name, permissions } = req.body as {
const { name, description, permissions } = req.body as {
name?: string;
description?: string;
permissions?: IRole['permissions'];
};
if (!name || typeof name !== 'string' || !name.trim()) {
@ -88,6 +89,7 @@ export function createAdminRolesHandlers(deps: AdminRolesDeps) {
}
const role = await createRoleByName({
name: name.trim(),
description: description ?? '',
permissions: permissions || {},
});
return res.status(201).json({ role });
@ -113,6 +115,9 @@ export function createAdminRolesHandlers(deps: AdminRolesDeps) {
if (body.name !== undefined) {
updates.name = body.name;
}
if (body.description !== undefined) {
updates.description = body.description;
}
const role = await updateRoleByName(name, updates);
return res.status(200).json({ role });

View file

@ -49,7 +49,7 @@ export function createRoleMethods(mongoose: typeof import('mongoose'), deps: Rol
*/
async function listRoles() {
const Role = mongoose.models.Role;
return await Role.find({}).select('name permissions').lean();
return await Role.find({}).select('name description permissions').lean();
}
/**

View file

@ -73,6 +73,7 @@ const rolePermissionsSchema = new Schema(
const roleSchema: Schema<IRole> = new Schema({
name: { type: String, required: true, index: true },
description: { type: String, default: '' },
permissions: {
type: rolePermissionsSchema,
},

View file

@ -5,6 +5,7 @@ import { CursorPaginationParams } from '~/common';
export interface IRole extends Document {
name: string;
description?: string;
permissions: {
[PermissionTypes.BOOKMARKS]?: {
[Permissions.USE]?: boolean;
@ -74,11 +75,13 @@ export type RolePermissionsInput = DeepPartial<RolePermissions>;
export interface CreateRoleRequest {
name: string;
description?: string;
permissions: RolePermissionsInput;
}
export interface UpdateRoleRequest {
name?: string;
description?: string;
permissions?: RolePermissionsInput;
}