How It Works
The approval workflow creates a multi-stage process for resource provisioning:User Permissions
NetBird Selfservice distinguishes between two types of users:Admin Users
- Create resources immediately
- No approval required
- Can approve/deny requests from others
- Full access to all resources
Non-Admin Users
- Submit requests for approval
- Cannot create resources directly
- Manage only their own resources
- Track request status
Submitting a Request
When a non-admin user wants to add a network resource, they follow this process:Fill Out Resource Form
Enter the resource details:
- Name: Descriptive name for the resource
- Address: IP, CIDR, or domain to access
- Description: Why you need this resource
- Enabled: Whether it should be active when approved
Wait for Admin Review
Your request is now queued for administrative review. The admin team receives an email notification.
Request Implementation
When a request is submitted, theRequestResourceAction creates a pending resource:
All requests are logged with action type
requested in the activity log for complete audit trails.Admin Notifications
Administrators receive email notifications for new requests via theResourceApprovalRequest mailable:
Email Contents
The approval request email includes:- Resource name and address
- Requester name and email
- Resource description (if provided)
- Direct action links:
- Approve button (7-day signed URL)
- Deny button (7-day signed URL)
Admin Email Configuration
The admin email is configured in the environment:Approving Requests
When an admin approves a request:Review Request Details
The admin examines the requested resource, including name, address, and justification.
Resource Created
The
ApproveResourceAction executes:- Creates the resource in NetBird
- Updates pending request status to
approved - Sets
decided_attimestamp - Logs the approval action
Approval Logic
Denying Requests
When an admin denies a request:Review Request
The admin determines the request should not be approved (security concerns, policy violations, etc.).
Request Updated
The
DenyResourceAction executes:- Updates status to
denied - Sets
decided_attimestamp - Logs the denial action
- Does NOT create a resource
Denial Logic
Email Notifications
ResourceApprovalRequest
Sent to admins when a new request is submitted:- Subject: “New Resource for Approval: [Resource Name]”
- Template:
emails.resource-approval-request - Includes: Approve/Deny action buttons
ResourceDecisionNotification
Sent to requesters when their request is decided:- Subject:
- “Resource approved: [Resource Name]”
- “Resource rejected: [Resource Name]”
- Template:
emails.resource-decision-notification - Includes: Decision outcome and next steps
Status Tracking
Pending resources have the following possible statuses:| Status | Description | Can Transition To |
|---|---|---|
pending | Awaiting admin review | approved, denied |
approved | Request approved, resource created | (terminal state) |
denied | Request rejected | (terminal state) |
Checking Status
ThePendingResource model provides a helper method:
Canceling Requests
Users can cancel their own pending requests before an admin makes a decision:Activity Logging
All approval workflow actions are logged for audit purposes:| Action | When Logged | Performed By |
|---|---|---|
requested | User submits request | Requester |
approved | Admin approves request | Admin |
denied | Admin denies request | Admin |
cancelled | User cancels request | Requester |
Best Practices
Provide Context
When requesting resources, include a detailed description explaining why you need access
Review Promptly
Admins should review requests promptly to avoid blocking user productivity
Set Clear Policies
Establish guidelines for what types of resources are auto-approved vs require review
Monitor Trends
Track request patterns to identify common needs and optimize your approval process
Ownership After Approval
When a request is approved:- The resource is assigned to the original requester (
user_idfrom pending resource) - The
created_byfield records the requester’s name - The resource appears in the requester’s resource list
- The requester can manage (update, disable, delete) their resource