[PR #3297] Route resource rule CRUD to shared policy rules when resourcePolicyId is set #34673

Open
opened 2026-06-17 04:19:13 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/fosrl/pangolin/pull/3297
Author: @Copilot
Created: 6/16/2026
Status: 🔄 Open

Base: mainHead: copilot/fix-rule-rest-api-issues


📝 Commits (4)

  • b686209 Initial plan
  • 0d96018 fix: update resource rule routes to use shared policy rules
  • a7c99f3 refactor: dedupe resource rule value validation
  • 0bde633 chore: simplify policy rule update/delete lookups

📊 Changes

5 files changed (+109 additions, -65 deletions)

View changed files

📝 server/routers/resource/createResourceRule.ts (+2 -6)
📝 server/routers/resource/deleteResourceRule.ts (+11 -7)
📝 server/routers/resource/getResource.ts (+2 -8)
📝 server/routers/resource/listResourceRules.ts (+2 -6)
📝 server/routers/resource/updateResourceRule.ts (+92 -38)

📄 Description

Resource rule APIs were reading rule IDs from policy-backed data while update/delete still targeted legacy resourceRules, causing “rule not found” and unstable IDs after new rule creation. This change aligns read/write paths so rule IDs are resolved against the same backing store.

  • Policy-vs-resource rule source alignment

    • Updated resource rule read paths to use shared policy data when resource.resourcePolicyId is present:
      • getResource.ts now overlays policy settings from resourcePolicyId (not defaultResourcePolicyId).
      • listResourceRules.ts now lists/counts from resourcePolicyRules for policy-backed resources.
    • Kept legacy resourceRules behavior for resources without resourcePolicyId.
  • CRUD consistency for policy-backed resources

    • createResourceRule.ts: inserts into resourcePolicyRules when resourcePolicyId is set.
    • updateResourceRule.ts: updates resourcePolicyRules for policy-backed resources; otherwise uses resourceRules.
    • deleteResourceRule.ts: deletes from resourcePolicyRules for policy-backed resources; otherwise uses resourceRules.
  • Rule ownership scoping + validation cleanup

    • Policy-backed update/delete now scope by both ruleId and resourcePolicyId to avoid cross-policy ID collisions.
    • Deduplicated match/value validation in updateResourceRule.ts via a shared helper used by both policy and legacy branches.
if (resource.resourcePolicyId !== null) {
  // policy-backed resource: operate on policy rules
  where(
    and(
      eq(resourcePolicyRules.ruleId, ruleId),
      eq(resourcePolicyRules.resourcePolicyId, resource.resourcePolicyId)
    )
  );
} else {
  // legacy resource-backed rule path
  where(eq(resourceRules.ruleId, ruleId));
}

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/fosrl/pangolin/pull/3297 **Author:** [@Copilot](https://github.com/apps/copilot-swe-agent) **Created:** 6/16/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `copilot/fix-rule-rest-api-issues` --- ### 📝 Commits (4) - [`b686209`](https://github.com/fosrl/pangolin/commit/b6862093d137f5b878c7b3bb7045f0b1f05ccbc3) Initial plan - [`0d96018`](https://github.com/fosrl/pangolin/commit/0d960181a2abdb4abaedb94ea974ef7f38e80eff) fix: update resource rule routes to use shared policy rules - [`a7c99f3`](https://github.com/fosrl/pangolin/commit/a7c99f336fdd936ebefe6861bdb2c48914bdd7d4) refactor: dedupe resource rule value validation - [`0bde633`](https://github.com/fosrl/pangolin/commit/0bde633c5f585f1c958e601f43c73ac1ad0b0211) chore: simplify policy rule update/delete lookups ### 📊 Changes **5 files changed** (+109 additions, -65 deletions) <details> <summary>View changed files</summary> 📝 `server/routers/resource/createResourceRule.ts` (+2 -6) 📝 `server/routers/resource/deleteResourceRule.ts` (+11 -7) 📝 `server/routers/resource/getResource.ts` (+2 -8) 📝 `server/routers/resource/listResourceRules.ts` (+2 -6) 📝 `server/routers/resource/updateResourceRule.ts` (+92 -38) </details> ### 📄 Description Resource rule APIs were reading rule IDs from policy-backed data while update/delete still targeted legacy `resourceRules`, causing “rule not found” and unstable IDs after new rule creation. This change aligns read/write paths so rule IDs are resolved against the same backing store. - **Policy-vs-resource rule source alignment** - Updated resource rule read paths to use shared policy data when `resource.resourcePolicyId` is present: - `getResource.ts` now overlays policy settings from `resourcePolicyId` (not `defaultResourcePolicyId`). - `listResourceRules.ts` now lists/counts from `resourcePolicyRules` for policy-backed resources. - Kept legacy `resourceRules` behavior for resources without `resourcePolicyId`. - **CRUD consistency for policy-backed resources** - `createResourceRule.ts`: inserts into `resourcePolicyRules` when `resourcePolicyId` is set. - `updateResourceRule.ts`: updates `resourcePolicyRules` for policy-backed resources; otherwise uses `resourceRules`. - `deleteResourceRule.ts`: deletes from `resourcePolicyRules` for policy-backed resources; otherwise uses `resourceRules`. - **Rule ownership scoping + validation cleanup** - Policy-backed update/delete now scope by both `ruleId` and `resourcePolicyId` to avoid cross-policy ID collisions. - Deduplicated match/value validation in `updateResourceRule.ts` via a shared helper used by both policy and legacy branches. ```ts if (resource.resourcePolicyId !== null) { // policy-backed resource: operate on policy rules where( and( eq(resourcePolicyRules.ruleId, ruleId), eq(resourcePolicyRules.resourcePolicyId, resource.resourcePolicyId) ) ); } else { // legacy resource-backed rule path where(eq(resourceRules.ruleId, ruleId)); } ``` --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-06-17 04:19:13 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/pangolin#34673