Skip to main content

Role-Based Access Control

FeatureSignals implements RBAC to control what team members can do within the platform.

Roles

RoleDescription
OwnerFull access. Can manage billing, organization settings, and all resources.
AdminCan manage team members, API keys, webhooks, and approve changes. Cannot manage billing.
DeveloperCan create, modify, and delete flags and segments. Can submit approval requests.
ViewerRead-only access to all resources. Cannot make changes.

Permission Matrix

ActionOwnerAdminDeveloperViewer
View projects, flags, segmentsYYYY
View audit logYYYY
View approvalsYYYY
View membersYYYY
Create/modify flagsYYY-
Create/modify segmentsYYY-
Toggle flag stateYYY-
Delete flags/segmentsYYY-
Create approval requestsYYY-
Promote flagsYYY-
Kill switchYYY-
Delete projects/environmentsYY--
Create/revoke API keysYY--
Review approvalsYY--
Manage webhooksYY--
Invite/remove membersYY--
View/reset metricsYY--

Environment-Level Permissions

Beyond roles, fine-grained permissions can be set per member per environment:

PermissionDescription
can_toggleCan enable/disable flags in this environment
can_edit_rulesCan modify targeting rules in this environment

This allows scenarios like:

  • Developers can toggle flags in dev and staging but not production
  • Only admins can modify targeting rules in production

Managing Roles

Invite a Member

curl -X POST http://localhost:8080/v1/members/invite \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"email": "dev@example.com", "role": "developer"}'

Update a Role

curl -X PUT http://localhost:8080/v1/members/$MEMBER_ID \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"role": "admin"}'

Set Environment Permissions

curl -X PUT http://localhost:8080/v1/members/$MEMBER_ID/permissions \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"permissions": [
{"env_id": "production-uuid", "can_toggle": false, "can_edit_rules": false},
{"env_id": "staging-uuid", "can_toggle": true, "can_edit_rules": true}
]
}'