make user lookup deterministic in blueprints by sorting

This commit is contained in:
miloschwartz
2026-09-01 15:36:10 -04:00
parent b4f6ae74d7
commit 2f013335f9
4 changed files with 85 additions and 98 deletions
+7 -26
View File
@@ -13,7 +13,7 @@ import {
userPolicies,
users
} from "@server/db";
import { eq, and, or } from "drizzle-orm";
import { eq, and } from "drizzle-orm";
import { Config, ResourcePolicyData } from "./types";
import logger from "@server/logger";
import { getUniqueResourcePolicyName } from "@server/db/names";
@@ -22,6 +22,7 @@ import { idpExistsForOrg } from "@server/lib/idp/idpExistsForOrg";
import { isValidCIDR, isValidIP, isValidUrlGlobPattern } from "../validators";
import { isLicensedOrSubscribed } from "#dynamic/lib/isLicencedOrSubscribed";
import { tierMatrix } from "../billing/tierMatrix";
import { findOrgUserByIdentifier } from "./findOrgUser";
export type ResourcePoliciesResults = {
resourcePolicyId: number;
@@ -466,17 +467,7 @@ async function syncUserPolicies(
.where(eq(userPolicies.resourcePolicyId, policyId));
for (const username of ssoUsers) {
const [user] = await trx
.select()
.from(users)
.innerJoin(userOrgs, eq(users.userId, userOrgs.userId))
.where(
and(
or(eq(users.username, username), eq(users.email, username)),
eq(userOrgs.orgId, orgId)
)
)
.limit(1);
const user = await findOrgUserByIdentifier(trx, orgId, username);
if (!user) {
logger.warn(
@@ -486,12 +477,12 @@ async function syncUserPolicies(
}
const alreadyExists = existingUserPolicies.some(
(up) => up.userId === user.user.userId
(up) => up.userId === user.userId
);
if (!alreadyExists) {
await trx.insert(userPolicies).values({
userId: user.user.userId,
userId: user.userId,
resourcePolicyId: policyId
});
}
@@ -536,17 +527,7 @@ async function addUserPolicies(
trx: Transaction
) {
for (const username of ssoUsers) {
const [user] = await trx
.select()
.from(users)
.innerJoin(userOrgs, eq(users.userId, userOrgs.userId))
.where(
and(
or(eq(users.username, username), eq(users.email, username)),
eq(userOrgs.orgId, orgId)
)
)
.limit(1);
const user = await findOrgUserByIdentifier(trx, orgId, username);
if (!user) {
logger.warn(
@@ -556,7 +537,7 @@ async function addUserPolicies(
}
await trx.insert(userPolicies).values({
userId: user.user.userId,
userId: user.userId,
resourcePolicyId: policyId
});
}