fix: rename createRole/deleteRole to avoid AccessRole name collision

The existing accessRole.ts already exports createRole/deleteRole for the
AccessRole model. In createMethods index.ts, these are spread after
roleMethods, overwriting them. Renamed our Role methods to
createRoleByName/deleteRoleByName to match the existing pattern
(getRoleByName, updateRoleByName) and avoid the collision.
This commit is contained in:
Dustin Healy 2026-03-25 08:56:38 -07:00
parent 69093a5d99
commit f947546fea
3 changed files with 12 additions and 12 deletions

View file

@ -14,10 +14,10 @@ const requireManageRoles = requireCapability(SystemCapabilities.MANAGE_ROLES);
const handlers = createAdminRolesHandlers({
listRoles: db.listRoles,
getRoleByName: db.getRoleByName,
createRole: db.createRole,
createRoleByName: db.createRoleByName,
updateRoleByName: db.updateRoleByName,
updateAccessPermissions: db.updateAccessPermissions,
deleteRole: db.deleteRole,
deleteRoleByName: db.deleteRoleByName,
findUser: db.findUser,
updateUser: db.updateUser,
listUsersByRole: db.listUsersByRole,

View file

@ -24,14 +24,14 @@ interface AdminMember {
export interface AdminRolesDeps {
listRoles: () => Promise<IRole[]>;
getRoleByName: (name: string, fields?: string | string[] | null) => Promise<IRole | null>;
createRole: (roleData: Partial<IRole>) => Promise<IRole>;
createRoleByName: (roleData: Partial<IRole>) => Promise<IRole>;
updateRoleByName: (name: string, updates: Partial<IRole>) => Promise<IRole | null>;
updateAccessPermissions: (
name: string,
perms: Record<string, Record<string, boolean>>,
roleData?: IRole,
) => Promise<void>;
deleteRole: (name: string) => Promise<IRole | null>;
deleteRoleByName: (name: string) => Promise<IRole | null>;
findUser: (
criteria: FilterQuery<IUser>,
fields?: string | string[] | null,
@ -44,10 +44,10 @@ export function createAdminRolesHandlers(deps: AdminRolesDeps) {
const {
listRoles,
getRoleByName,
createRole,
createRoleByName,
updateRoleByName,
updateAccessPermissions,
deleteRole,
deleteRoleByName,
findUser,
updateUser,
listUsersByRole,
@ -86,7 +86,7 @@ export function createAdminRolesHandlers(deps: AdminRolesDeps) {
if (!name || typeof name !== 'string' || !name.trim()) {
return res.status(400).json({ error: 'name is required' });
}
const role = await createRole({
const role = await createRoleByName({
name: name.trim(),
permissions: permissions || {},
});
@ -159,7 +159,7 @@ export function createAdminRolesHandlers(deps: AdminRolesDeps) {
return res.status(404).json({ error: 'Role not found' });
}
await deleteRole(name);
await deleteRoleByName(name);
return res.status(200).json({ success: true });
} catch (error) {
logger.error('[adminRoles] deleteRole error:', error);

View file

@ -343,7 +343,7 @@ export function createRoleMethods(mongoose: typeof import('mongoose'), deps: Rol
}
/** Rejects names that match system roles. */
async function createRole(roleData: Partial<IRole>): Promise<IRole> {
async function createRoleByName(roleData: Partial<IRole>): Promise<IRole> {
const { name } = roleData;
if (!name || typeof name !== 'string' || !name.trim()) {
throw new Error('Role name is required');
@ -368,7 +368,7 @@ export function createRoleMethods(mongoose: typeof import('mongoose'), deps: Rol
}
/** Guards against deleting system roles. Reassigns affected users back to USER. */
async function deleteRole(roleName: string): Promise<IRole | null> {
async function deleteRoleByName(roleName: string): Promise<IRole | null> {
if (SystemRoles[roleName as keyof typeof SystemRoles]) {
throw new Error(`Cannot delete system role: ${roleName}`);
}
@ -399,8 +399,8 @@ export function createRoleMethods(mongoose: typeof import('mongoose'), deps: Rol
updateRoleByName,
updateAccessPermissions,
migrateRoleSchema,
createRole,
deleteRole,
createRoleByName,
deleteRoleByName,
listUsersByRole,
};
}