By creating this pull request, I grant the project maintainers an unlimited,
perpetual license to use, modify, and redistribute these contributions under any terms they
choose, including both the AGPLv3 and the Fossorial Commercial license terms. I
represent that I have the right to grant this license for all contributed content.
Description
This PR adds a new rule templates feature that allows users to create reusable sets of access control rules that can be assigned to multiple resources. This provides a more efficient way to manage consistent access control across multiple resources.
Key Features
Rule Templates Management: Create, edit, and delete rule templates
Template Assignment: Assign templates to resources, automatically creating resource rules from template rules
Automatic Propagation: Changes to template rules automatically propagate to all assigned resources
Template Rule Protection: Rules created from templates are protected from editing (except priority) on resource pages
Visual Indicators: Clear badges distinguish between template-managed and manual rules
Technical Implementation
New database tables: ruleTemplates, templateRules, resourceTemplates
Added templateRuleId field to resourceRules for tracking template origins
Database Changes
Migration script 1.10.0 adds new tables and templateRuleId column
How to test?
1. Create a Rule Template
Navigate to http://localhost:3002/org/settings/rule-templates
Click "Create Template" and fill in name/description
Verify template appears in the list
2. Add Rules to Template
Click on a template to edit it
Go to the "Rules" tab (default)
Add rules with different match types (IP, IP Range, Path)
Verify rules appear in the table and can be edited/deleted
3. Assign Template to Resource
Go to a resource's rules page: http://localhost:3002/org/settings/resources/{resourceId}/rules
Enable rules if not already enabled
In the "Rule templates" section, assign a template
Verify template rules appear in the resource rules table with "Template" badges
4. Test Template Rule Protection
On the resource rules page, try to edit a template-managed rule
Verify only priority can be changed, other fields are disabled
Verify delete button is disabled for template rules
5. Test Template Rule Propagation
Edit a rule in the template
Verify the change propagates to all assigned resources
Verify the resource rules show the updated values
6. Test Template Unassignment
Unassign a template from a resource
Verify all template-managed rules are removed from the resource
Verify manual rules remain unchanged
Screenshots
Rule Template Screens
Resource Rules Screens
🔄 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/1231
**Author:** [@adrianeastles](https://github.com/adrianeastles)
**Created:** 8/7/2025
**Status:** ✅ Merged
**Merged:** 10/7/2025
**Merged by:** [@oschwartz10612](https://github.com/oschwartz10612)
**Base:** `policies` ← **Head:** `feature/resource-rule-templates`
---
### 📝 Commits (5)
- [`9dce7b2`](https://github.com/fosrl/pangolin/commit/9dce7b2cdee8289d8c20f9b07f845ae8e9b258ad) Scoped Branch - Rule Templates:
- [`2cb2a11`](https://github.com/fosrl/pangolin/commit/2cb2a115b017a8eff11a154aac21d11e6f91c67e) align template rules table columns with resource rules page
- [`1574cbc`](https://github.com/fosrl/pangolin/commit/1574cbc5df9fc15a3a6faa12e2ab7299f46009bb) Pagination for template rules table and resource rules table.
- [`16a8828`](https://github.com/fosrl/pangolin/commit/16a88281bb0274e18d9d226647e8b3199bedbbe3) Added better notifications for users when templates are updated.
- [`75cec73`](https://github.com/fosrl/pangolin/commit/75cec731e854d40763599a69f506ec3b168af60d) Resource Rules page:
### 📊 Changes
**36 files changed** (+3842 additions, -298 deletions)
<details>
<summary>View changed files</summary>
📝 `messages/en-US.json` (+21 -0)
📝 `server/db/pg/schema.ts` (+39 -0)
📝 `server/db/sqlite/schema.ts` (+39 -0)
📝 `server/openApi.ts` (+1 -0)
📝 `server/routers/external.ts` (+75 -0)
📝 `server/routers/resource/listResourceRules.ts` (+1 -0)
➕ `server/routers/ruleTemplate/addTemplateRule.ts` (+161 -0)
➕ `server/routers/ruleTemplate/assignTemplateToResource.ts` (+176 -0)
➕ `server/routers/ruleTemplate/createRuleTemplate.ts` (+121 -0)
➕ `server/routers/ruleTemplate/deleteRuleTemplate.ts` (+79 -0)
➕ `server/routers/ruleTemplate/deleteTemplateRule.ts` (+114 -0)
➕ `server/routers/ruleTemplate/getRuleTemplate.ts` (+77 -0)
➕ `server/routers/ruleTemplate/index.ts` (+12 -0)
➕ `server/routers/ruleTemplate/listResourceTemplates.ts` (+104 -0)
➕ `server/routers/ruleTemplate/listRuleTemplates.ts` (+127 -0)
➕ `server/routers/ruleTemplate/listTemplateRules.ts` (+73 -0)
➕ `server/routers/ruleTemplate/unassignTemplateFromResource.ts` (+130 -0)
➕ `server/routers/ruleTemplate/updateRuleTemplate.ts` (+117 -0)
➕ `server/routers/ruleTemplate/updateTemplateRule.ts` (+194 -0)
📝 `server/setup/migrationsPg.ts` (+3 -1)
_...and 16 more files_
</details>
### 📄 Description
## Community Contribution License Agreement
By creating this pull request, I grant the project maintainers an unlimited,
perpetual license to use, modify, and redistribute these contributions under any terms they
choose, including both the AGPLv3 and the Fossorial Commercial license terms. I
represent that I have the right to grant this license for all contributed content.
### Description
This PR adds a new rule templates feature that allows users to create reusable sets of access control rules that can be assigned to multiple resources. This provides a more efficient way to manage consistent access control across multiple resources.
### Key Features
- **Rule Templates Management**: Create, edit, and delete rule templates
- **Template Assignment**: Assign templates to resources, automatically creating resource rules from template rules
- **Automatic Propagation**: Changes to template rules automatically propagate to all assigned resources
- **Template Rule Protection**: Rules created from templates are protected from editing (except priority) on resource pages
- **Visual Indicators**: Clear badges distinguish between template-managed and manual rules
### Technical Implementation
- New database tables: `ruleTemplates`, `templateRules`, `resourceTemplates`
- Added `templateRuleId` field to `resourceRules` for tracking template origins
### Database Changes
- Migration script `1.10.0` adds new tables and `templateRuleId` column
## How to test?
### 1. Create a Rule Template
1. Navigate to `http://localhost:3002/org/settings/rule-templates`
2. Click "Create Template" and fill in name/description
3. Verify template appears in the list
### 2. Add Rules to Template
1. Click on a template to edit it
2. Go to the "Rules" tab (default)
3. Add rules with different match types (IP, IP Range, Path)
4. Verify rules appear in the table and can be edited/deleted
### 3. Assign Template to Resource
1. Go to a resource's rules page: `http://localhost:3002/org/settings/resources/{resourceId}/rules`
2. Enable rules if not already enabled
3. In the "Rule templates" section, assign a template
4. Verify template rules appear in the resource rules table with "Template" badges
### 4. Test Template Rule Protection
1. On the resource rules page, try to edit a template-managed rule
2. Verify only priority can be changed, other fields are disabled
3. Verify delete button is disabled for template rules
### 5. Test Template Rule Propagation
1. Edit a rule in the template
2. Verify the change propagates to all assigned resources
3. Verify the resource rules show the updated values
### 6. Test Template Unassignment
1. Unassign a template from a resource
2. Verify all template-managed rules are removed from the resource
3. Verify manual rules remain unchanged
### Screenshots
#### Rule Template Screens
<img width="1783" height="613" alt="Screenshot 2025-08-07 at 11 10 59 pm" src="https://github.com/user-attachments/assets/3b6b06eb-a123-46f9-a39e-db23a27c1f8f" />
<img width="1788" height="616" alt="Screenshot 2025-08-07 at 11 11 06 pm" src="https://github.com/user-attachments/assets/091e5022-e577-4f93-89c8-cbfb97394b28" />
<img width="1777" height="681" alt="Screenshot 2025-08-07 at 11 11 19 pm" src="https://github.com/user-attachments/assets/24c6e848-80d7-4b8e-be6a-70edead5d514" />
#### Resource Rules Screens
<img width="1785" height="1001" alt="Screenshot 2025-08-07 at 11 12 31 pm" src="https://github.com/user-attachments/assets/777707f0-ba2f-44de-bfa7-a07b8af258b0" />
<img width="1522" height="406" alt="Screenshot 2025-08-07 at 11 12 39 pm" src="https://github.com/user-attachments/assets/e0ffc578-d91f-4a49-af4b-a1e7227d38b6" />
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/fosrl/pangolin/pull/1231
Author: @adrianeastles
Created: 8/7/2025
Status: ✅ Merged
Merged: 10/7/2025
Merged by: @oschwartz10612
Base:
policies← Head:feature/resource-rule-templates📝 Commits (5)
9dce7b2Scoped Branch - Rule Templates:2cb2a11align template rules table columns with resource rules page1574cbcPagination for template rules table and resource rules table.16a8828Added better notifications for users when templates are updated.75cec73Resource Rules page:📊 Changes
36 files changed (+3842 additions, -298 deletions)
View changed files
📝
messages/en-US.json(+21 -0)📝
server/db/pg/schema.ts(+39 -0)📝
server/db/sqlite/schema.ts(+39 -0)📝
server/openApi.ts(+1 -0)📝
server/routers/external.ts(+75 -0)📝
server/routers/resource/listResourceRules.ts(+1 -0)➕
server/routers/ruleTemplate/addTemplateRule.ts(+161 -0)➕
server/routers/ruleTemplate/assignTemplateToResource.ts(+176 -0)➕
server/routers/ruleTemplate/createRuleTemplate.ts(+121 -0)➕
server/routers/ruleTemplate/deleteRuleTemplate.ts(+79 -0)➕
server/routers/ruleTemplate/deleteTemplateRule.ts(+114 -0)➕
server/routers/ruleTemplate/getRuleTemplate.ts(+77 -0)➕
server/routers/ruleTemplate/index.ts(+12 -0)➕
server/routers/ruleTemplate/listResourceTemplates.ts(+104 -0)➕
server/routers/ruleTemplate/listRuleTemplates.ts(+127 -0)➕
server/routers/ruleTemplate/listTemplateRules.ts(+73 -0)➕
server/routers/ruleTemplate/unassignTemplateFromResource.ts(+130 -0)➕
server/routers/ruleTemplate/updateRuleTemplate.ts(+117 -0)➕
server/routers/ruleTemplate/updateTemplateRule.ts(+194 -0)📝
server/setup/migrationsPg.ts(+3 -1)...and 16 more files
📄 Description
Community Contribution License Agreement
By creating this pull request, I grant the project maintainers an unlimited,
perpetual license to use, modify, and redistribute these contributions under any terms they
choose, including both the AGPLv3 and the Fossorial Commercial license terms. I
represent that I have the right to grant this license for all contributed content.
Description
This PR adds a new rule templates feature that allows users to create reusable sets of access control rules that can be assigned to multiple resources. This provides a more efficient way to manage consistent access control across multiple resources.
Key Features
Technical Implementation
ruleTemplates,templateRules,resourceTemplatestemplateRuleIdfield toresourceRulesfor tracking template originsDatabase Changes
1.10.0adds new tables andtemplateRuleIdcolumnHow to test?
1. Create a Rule Template
http://localhost:3002/org/settings/rule-templates2. Add Rules to Template
3. Assign Template to Resource
http://localhost:3002/org/settings/resources/{resourceId}/rules4. Test Template Rule Protection
5. Test Template Rule Propagation
6. Test Template Unassignment
Screenshots
Rule Template Screens
Resource Rules Screens
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.