feat: manage integration permission behavior (#8441)

Co-authored-by: Pepe Fagoaga <pepe@prowler.com>
This commit is contained in:
Alejandro Bailo
2025-08-04 17:49:04 +02:00
committed by GitHub
parent a5187c6a42
commit c748e57878
7 changed files with 24 additions and 12 deletions
+1 -2
View File
@@ -120,8 +120,7 @@ export const addRole = async (formData: FormData) => {
manage_providers: formData.get("manage_providers") === "true",
manage_scans: formData.get("manage_scans") === "true",
manage_account: formData.get("manage_account") === "true",
// TODO: Add back when we have integrations ready
// manage_integrations: formData.get("manage_integrations") === "true",
manage_integrations: formData.get("manage_integrations") === "true",
unlimited_visibility: formData.get("unlimited_visibility") === "true",
},
relationships: {},
@@ -36,6 +36,7 @@ export const AddRoleForm = ({
name: "",
manage_users: false,
manage_providers: false,
manage_integrations: false,
manage_scans: false,
unlimited_visibility: false,
groups: [],
@@ -68,7 +69,7 @@ export const AddRoleForm = ({
"manage_account",
"manage_billing",
"manage_providers",
// "manage_integrations",
"manage_integrations",
"manage_scans",
"unlimited_visibility",
];
@@ -87,6 +88,7 @@ export const AddRoleForm = ({
formData.append("name", values.name);
formData.append("manage_users", String(values.manage_users));
formData.append("manage_providers", String(values.manage_providers));
formData.append("manage_integrations", String(values.manage_integrations));
formData.append("manage_scans", String(values.manage_scans));
formData.append("manage_account", String(values.manage_account));
formData.append(
@@ -99,7 +99,7 @@ export const EditRoleForm = ({
updatedFields.manage_users = values.manage_users;
updatedFields.manage_providers = values.manage_providers;
updatedFields.manage_account = values.manage_account;
// updatedFields.manage_integrations = values.manage_integrations;
updatedFields.manage_integrations = values.manage_integrations;
updatedFields.manage_scans = values.manage_scans;
updatedFields.unlimited_visibility = values.unlimited_visibility;
+4
View File
@@ -33,6 +33,10 @@ const MENU_HIDE_RULES: MenuHideRule[] = [
label: "Billing",
condition: (permissions) => permissions?.manage_billing === false,
},
{
label: "Integrations",
condition: (permissions) => permissions?.manage_integrations === false,
},
// Add more rules as needed:
// {
// label: "Users",
+6 -6
View File
@@ -322,12 +322,12 @@ export const permissionFormFields: PermissionInfo[] = [
description:
"Allows configuration and management of cloud provider connections",
},
// {
// field: "manage_integrations",
// label: "Manage Integrations",
// description:
// "Controls the setup and management of third-party integrations",
// },
{
field: "manage_integrations",
label: "Manage Integrations",
description:
"Allows configuration and management of third-party integrations",
},
{
field: "manage_scans",
label: "Manage Scans",
+7
View File
@@ -29,6 +29,13 @@ export default auth((req: NextRequest & { auth: any }) => {
if (pathname.startsWith("/billing") && !permissions.manage_billing) {
return NextResponse.redirect(new URL("/profile", req.url));
}
if (
pathname.startsWith("/integrations") &&
!permissions.manage_integrations
) {
return NextResponse.redirect(new URL("/profile", req.url));
}
}
return NextResponse.next();
+2 -2
View File
@@ -11,7 +11,7 @@ export const addRoleFormSchema = z.object({
manage_account: z.boolean().default(false),
manage_billing: z.boolean().default(false),
manage_providers: z.boolean().default(false),
// manage_integrations: z.boolean().default(false),
manage_integrations: z.boolean().default(false),
manage_scans: z.boolean().default(false),
unlimited_visibility: z.boolean().default(false),
groups: z.array(z.string()).optional(),
@@ -23,7 +23,7 @@ export const editRoleFormSchema = z.object({
manage_account: z.boolean().default(false),
manage_billing: z.boolean().default(false),
manage_providers: z.boolean().default(false),
// manage_integrations: z.boolean().default(false),
manage_integrations: z.boolean().default(false),
manage_scans: z.boolean().default(false),
unlimited_visibility: z.boolean().default(false),
groups: z.array(z.string()).optional(),