mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-13 17:29:42 +00:00
fix: approval policy org check
This commit is contained in:
@@ -162,7 +162,7 @@ export const accessApprovalPolicyServiceFactory = ({
|
|||||||
|
|
||||||
if (invalidUsernames.length) {
|
if (invalidUsernames.length) {
|
||||||
throw new BadRequestError({
|
throw new BadRequestError({
|
||||||
message: `Invalid approver user: ${invalidUsernames.join(", ")}`
|
message: `Invalid approver user: ${invalidUsernames.map((i) => i.username).join(", ")}`
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,6 +173,22 @@ export const accessApprovalPolicyServiceFactory = ({
|
|||||||
}))
|
}))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (approverUserIds.length > 0) {
|
||||||
|
const allApproverUserIds = approverUserIds.map((au) => au.id);
|
||||||
|
const approverMembers = await orgMembershipDAL.find({
|
||||||
|
$in: { userId: allApproverUserIds },
|
||||||
|
orgId: actorOrgId
|
||||||
|
});
|
||||||
|
|
||||||
|
if (approverMembers.length !== allApproverUserIds.length) {
|
||||||
|
const approverMemberUserIds = new Set(approverMembers.map((member) => member.userId as string));
|
||||||
|
const userIdsNotInOrg = allApproverUserIds.filter((id) => !approverMemberUserIds.has(id));
|
||||||
|
throw new BadRequestError({
|
||||||
|
message: `Some approvers are not in the organization: ${userIdsNotInOrg.join(", ")}`
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
let groupBypassers: string[] = [];
|
let groupBypassers: string[] = [];
|
||||||
let bypasserUserIds: string[] = [];
|
let bypasserUserIds: string[] = [];
|
||||||
|
|
||||||
@@ -488,7 +504,7 @@ export const accessApprovalPolicyServiceFactory = ({
|
|||||||
|
|
||||||
if (invalidUsernames.length) {
|
if (invalidUsernames.length) {
|
||||||
throw new BadRequestError({
|
throw new BadRequestError({
|
||||||
message: `Invalid approver user: ${invalidUsernames.join(", ")}`
|
message: `Invalid approver user: ${invalidUsernames.map((i) => i.username).join(", ")}`
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -499,6 +515,22 @@ export const accessApprovalPolicyServiceFactory = ({
|
|||||||
}))
|
}))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (approverUserIds.length > 0) {
|
||||||
|
const allApproverUserIds = approverUserIds.map((au) => au.id);
|
||||||
|
const approverMembers = await orgMembershipDAL.find({
|
||||||
|
$in: { userId: allApproverUserIds },
|
||||||
|
orgId: actorOrgId
|
||||||
|
});
|
||||||
|
|
||||||
|
if (approverMembers.length !== allApproverUserIds.length) {
|
||||||
|
const approverMemberUserIds = new Set(approverMembers.map((member) => member.userId as string));
|
||||||
|
const userIdsNotInOrg = allApproverUserIds.filter((id) => !approverMemberUserIds.has(id));
|
||||||
|
throw new BadRequestError({
|
||||||
|
message: `Some approvers are not in the organization: ${userIdsNotInOrg.join(", ")}`
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
await accessApprovalPolicyApproverDAL.insertMany(
|
await accessApprovalPolicyApproverDAL.insertMany(
|
||||||
approverUserIds.map((el) => ({
|
approverUserIds.map((el) => ({
|
||||||
approverUserId: el.id,
|
approverUserId: el.id,
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { ProjectPermissionActions, ProjectPermissionSub } from "@app/ee/services
|
|||||||
import { BadRequestError, NotFoundError } from "@app/lib/errors";
|
import { BadRequestError, NotFoundError } from "@app/lib/errors";
|
||||||
import { removeTrailingSlash } from "@app/lib/fn";
|
import { removeTrailingSlash } from "@app/lib/fn";
|
||||||
import { containsGlobPatterns } from "@app/lib/picomatch";
|
import { containsGlobPatterns } from "@app/lib/picomatch";
|
||||||
|
import { TOrgMembershipDALFactory } from "@app/services/org-membership/org-membership-dal";
|
||||||
import { TProjectEnvDALFactory } from "@app/services/project-env/project-env-dal";
|
import { TProjectEnvDALFactory } from "@app/services/project-env/project-env-dal";
|
||||||
import { TUserDALFactory } from "@app/services/user/user-dal";
|
import { TUserDALFactory } from "@app/services/user/user-dal";
|
||||||
|
|
||||||
@@ -39,6 +40,7 @@ type TSecretApprovalPolicyServiceFactoryDep = {
|
|||||||
secretApprovalPolicyDAL: TSecretApprovalPolicyDALFactory;
|
secretApprovalPolicyDAL: TSecretApprovalPolicyDALFactory;
|
||||||
projectEnvDAL: Pick<TProjectEnvDALFactory, "findOne" | "find">;
|
projectEnvDAL: Pick<TProjectEnvDALFactory, "findOne" | "find">;
|
||||||
userDAL: Pick<TUserDALFactory, "find">;
|
userDAL: Pick<TUserDALFactory, "find">;
|
||||||
|
orgMembershipDAL: Pick<TOrgMembershipDALFactory, "find">;
|
||||||
secretApprovalPolicyApproverDAL: TSecretApprovalPolicyApproverDALFactory;
|
secretApprovalPolicyApproverDAL: TSecretApprovalPolicyApproverDALFactory;
|
||||||
secretApprovalPolicyBypasserDAL: TSecretApprovalPolicyBypasserDALFactory;
|
secretApprovalPolicyBypasserDAL: TSecretApprovalPolicyBypasserDALFactory;
|
||||||
licenseService: Pick<TLicenseServiceFactory, "getPlan">;
|
licenseService: Pick<TLicenseServiceFactory, "getPlan">;
|
||||||
@@ -56,6 +58,7 @@ export const secretApprovalPolicyServiceFactory = ({
|
|||||||
secretApprovalPolicyEnvironmentDAL,
|
secretApprovalPolicyEnvironmentDAL,
|
||||||
projectEnvDAL,
|
projectEnvDAL,
|
||||||
userDAL,
|
userDAL,
|
||||||
|
orgMembershipDAL,
|
||||||
licenseService,
|
licenseService,
|
||||||
secretApprovalRequestDAL
|
secretApprovalRequestDAL
|
||||||
}: TSecretApprovalPolicyServiceFactoryDep) => {
|
}: TSecretApprovalPolicyServiceFactoryDep) => {
|
||||||
@@ -233,6 +236,24 @@ export const secretApprovalPolicyServiceFactory = ({
|
|||||||
userApproverIds = userApproverIds.concat(approverUsers.map((user) => user.id));
|
userApproverIds = userApproverIds.concat(approverUsers.map((user) => user.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (userApproverIds.length > 0) {
|
||||||
|
const approverMembers = await orgMembershipDAL.find(
|
||||||
|
{
|
||||||
|
$in: { userId: userApproverIds },
|
||||||
|
orgId: actorOrgId
|
||||||
|
},
|
||||||
|
{ tx }
|
||||||
|
);
|
||||||
|
|
||||||
|
if (approverMembers.length !== userApproverIds.length) {
|
||||||
|
const approverMemberUserIds = new Set(approverMembers.map((member) => member.userId as string));
|
||||||
|
const userIdsNotInOrg = userApproverIds.filter((id) => !approverMemberUserIds.has(id));
|
||||||
|
throw new BadRequestError({
|
||||||
|
message: `Some approvers are not in the organization: ${userIdsNotInOrg.join(", ")}`
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
await secretApprovalPolicyApproverDAL.insertMany(
|
await secretApprovalPolicyApproverDAL.insertMany(
|
||||||
userApproverIds.map((approverUserId) => ({
|
userApproverIds.map((approverUserId) => ({
|
||||||
approverUserId,
|
approverUserId,
|
||||||
@@ -425,6 +446,24 @@ export const secretApprovalPolicyServiceFactory = ({
|
|||||||
userApproverIds = userApproverIds.concat(approverUsers.map((user) => user.id));
|
userApproverIds = userApproverIds.concat(approverUsers.map((user) => user.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (userApproverIds.length > 0) {
|
||||||
|
const approverMembers = await orgMembershipDAL.find(
|
||||||
|
{
|
||||||
|
$in: { userId: userApproverIds },
|
||||||
|
orgId: actorOrgId
|
||||||
|
},
|
||||||
|
{ tx }
|
||||||
|
);
|
||||||
|
|
||||||
|
if (approverMembers.length !== userApproverIds.length) {
|
||||||
|
const approverMemberUserIds = new Set(approverMembers.map((member) => member.userId as string));
|
||||||
|
const userIdsNotInOrg = userApproverIds.filter((id) => !approverMemberUserIds.has(id));
|
||||||
|
throw new BadRequestError({
|
||||||
|
message: `Some approvers are not in the organization: ${userIdsNotInOrg.join(", ")}`
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
await secretApprovalPolicyApproverDAL.insertMany(
|
await secretApprovalPolicyApproverDAL.insertMany(
|
||||||
userApproverIds.map((approverUserId) => ({
|
userApproverIds.map((approverUserId) => ({
|
||||||
approverUserId,
|
approverUserId,
|
||||||
|
|||||||
@@ -604,6 +604,7 @@ export const registerRoutes = async (
|
|||||||
secretApprovalPolicyDAL,
|
secretApprovalPolicyDAL,
|
||||||
licenseService,
|
licenseService,
|
||||||
userDAL,
|
userDAL,
|
||||||
|
orgMembershipDAL,
|
||||||
secretApprovalRequestDAL
|
secretApprovalRequestDAL
|
||||||
});
|
});
|
||||||
const tokenService = tokenServiceFactory({ tokenDAL: authTokenDAL, userDAL, orgMembershipDAL });
|
const tokenService = tokenServiceFactory({ tokenDAL: authTokenDAL, userDAL, orgMembershipDAL });
|
||||||
|
|||||||
Reference in New Issue
Block a user