Skip to content

Roles & Permissions

Forgecroft uses org roles as a baseline and composable access grants for fine-grained control.

Every org member has one role:

RoleRankCapabilities
owner2Full control. Can manage billing, delete the org. Cannot be demoted by others.
admin1Manage members (except owners), create API keys, update org settings, manage all resources.
member0Work within projects and Systems they have access to.
reader-1Read-only access to org resources.
  • Only owners can promote users to admin or owner.
  • Only owners can change another owner’s role.
  • You cannot change your own role.
  • Owners cannot be demoted by non-owners.

Verbs grant granular permissions on specific resources, independent of org role:

VerbAllows
readView the resource
writeModify the resource
deleteRemove the resource
manage_membersAdd/remove members
manage_grantsCreate/revoke access grants
useUse the resource (e.g., a tool config)

Access grants assign verbs to subjects on specific resources:

{
"subject_type": "user",
"subject_id": "user-uuid",
"verb": "write",
"resource_type": "project",
"resource_id": "project-uuid"
}

Subject types: user (a specific user) or team (all members of a team).

Resource types: org, project, team, tool_config, notification.

Escalation prevention: You can only grant a verb you already hold. You cannot give permissions you lack.

When determining effective access to a resource, Forgecroft checks in this order:

PriorityConditionEffective Access
1Org owner or adminadmin
2write grant on the parent projectadmin
3write grant on the resourceadmin
4read grant on the project or resourcemember
5Org reader rolemember (reads only)
6No matching grantforbidden
LevelVerbs
adminread, write, delete, manage_members, manage_grants, use
memberread

All access grant operations are recorded. Query with GET /access-events, filtered by subject, resource, or time range. Only org admins can view audit events.

EndpointDescription
GET /org/membersList org members
PATCH /org/members/{userId}Change a member’s role
DELETE /org/members/{userId}Remove a member
POST /access-grantsCreate an access grant
GET /access-grantsList grants visible to you
DELETE /access-grants/{id}Revoke a grant
GET /access-eventsQuery the audit trail
POST /projects/{id}/membersAdd a project member
POST /teams/{id}/membersAdd a team member