Fix API endpoint action issues

This commit is contained in:
Owen
2026-05-04 16:01:40 -07:00
parent 43f2e32231
commit 5922bfb1a0
5 changed files with 24 additions and 23 deletions

View File

@@ -5,6 +5,7 @@ import { and, eq, inArray } from "drizzle-orm";
import createHttpError from "http-errors"; import createHttpError from "http-errors";
import HttpCode from "@server/types/HttpCode"; import HttpCode from "@server/types/HttpCode";
import { getUserOrgRoleIds } from "@server/lib/userOrgRoles"; import { getUserOrgRoleIds } from "@server/lib/userOrgRoles";
import logger from "@server/logger";
export enum ActionsEnum { export enum ActionsEnum {
createOrgUser = "createOrgUser", createOrgUser = "createOrgUser",
@@ -199,6 +200,23 @@ export async function checkUserActionPermission(
} }
} }
// If no direct permission, check role-based permission (any of user's roles)
const roleActionPermission = await db
.select()
.from(roleActions)
.where(
and(
eq(roleActions.actionId, actionId),
inArray(roleActions.roleId, userOrgRoleIds),
eq(roleActions.orgId, req.userOrgId!)
)
)
.limit(1);
if (roleActionPermission.length > 0) {
return true;
}
// Check if the user has direct permission for the action in the current org // Check if the user has direct permission for the action in the current org
const userActionPermission = await db const userActionPermission = await db
.select() .select()
@@ -216,20 +234,7 @@ export async function checkUserActionPermission(
return true; return true;
} }
// If no direct permission, check role-based permission (any of user's roles) return false;
const roleActionPermission = await db
.select()
.from(roleActions)
.where(
and(
eq(roleActions.actionId, actionId),
inArray(roleActions.roleId, userOrgRoleIds),
eq(roleActions.orgId, req.userOrgId!)
)
)
.limit(1);
return roleActionPermission.length > 0;
} catch (error) { } catch (error) {
console.error("Error checking user action permission:", error); console.error("Error checking user action permission:", error);
throw createHttpError( throw createHttpError(

View File

@@ -111,7 +111,7 @@ export async function verifyResourcePolicyAccess(
req.userOrgRoleIds = await getUserOrgRoleIds( req.userOrgRoleIds = await getUserOrgRoleIds(
req.userOrg.userId, req.userOrg.userId,
orgId! policy.orgId
); );
req.userOrgId = policy.orgId; req.userOrgId = policy.orgId;

View File

@@ -38,7 +38,7 @@ export function verifyUserCanSetUserOrgRoles() {
return next( return next(
createHttpError( createHttpError(
HttpCode.FORBIDDEN, HttpCode.FORBIDDEN,
"User does not have permission perform this action" "User does not have permission to set user organization roles"
) )
); );
} catch (error) { } catch (error) {

View File

@@ -105,7 +105,6 @@ authenticated.put(
site.createSite site.createSite
); );
authenticated.get( authenticated.get(
"/org/:orgId/sites", "/org/:orgId/sites",
verifyOrgAccess, verifyOrgAccess,
@@ -727,7 +726,7 @@ authenticated.put(
"/resource-policy/:resourcePolicyId/access-control", "/resource-policy/:resourcePolicyId/access-control",
verifyResourcePolicyAccess, verifyResourcePolicyAccess,
verifyUserHasAction(ActionsEnum.setResourcePolicyUsers), verifyUserHasAction(ActionsEnum.setResourcePolicyUsers),
verifyUserHasAction(ActionsEnum.setResourcePolicyRoles), logActionAudit(ActionsEnum.setResourcePolicyUsers),
policy.setResourcePolicyAccessControl policy.setResourcePolicyAccessControl
); );

View File

@@ -47,10 +47,7 @@ export async function queryUser(orgId: string, userId: string) {
.from(userOrgRoles) .from(userOrgRoles)
.leftJoin(roles, eq(userOrgRoles.roleId, roles.roleId)) .leftJoin(roles, eq(userOrgRoles.roleId, roles.roleId))
.where( .where(
and( and(eq(userOrgRoles.userId, userId), eq(userOrgRoles.orgId, orgId))
eq(userOrgRoles.userId, userId),
eq(userOrgRoles.orgId, orgId)
)
); );
const isAdmin = roleRows.some((r) => r.isAdmin); const isAdmin = roleRows.some((r) => r.isAdmin);
@@ -146,7 +143,7 @@ export async function getOrgUser(
return next( return next(
createHttpError( createHttpError(
HttpCode.FORBIDDEN, HttpCode.FORBIDDEN,
"User does not have permission perform this action" "User does not have permission to get organization user details"
) )
); );
} }