Operations and Selectors
Catalog of authorization operations, selectors, and the rule syntax accepted by grants, role capabilities, and API-key ceilings.
Operations and Selectors
Every unit of authority in GoodMem is a rule: one operation paired with one selector. Rules appear in three places — direct grants, the capabilities of built-in roles, and the permission ceilings of scoped API keys. This page catalogs the operations and selectors and the syntax for writing rules. For how the pieces combine into an authorization decision, see Roles, Grants, and Selectors.
Selectors
| Selector | Meaning | Example |
|---|---|---|
ANY | Every resource the operation can apply to, regardless of owner. | READ_SPACE:ANY — read every space. |
OWN | Resources whose authorization owner is the subject. | DELETE_SPACE:OWN — delete spaces you own. |
EXACT | Exactly one named resource. | READ_SPACE:EXACT:SPACE:<uuid> — read that space. |
DIRECT_MEMBERS_OF | Direct members of one named container, present and future. | READ_MEMORY:DIRECT_MEMBERS_OF:SPACE:<uuid> — read every memory in that space. |
DIRECT_MEMBERS_OF covers a container's members without covering the container itself. A rule on
the direct members of space Y says nothing about Y, about another space's memories, or about
resources Y merely references, such as its embedders.
Operations
Operation numbers are stable identifiers shared by the API, the database, and the server
implementation. The resource kind is what the operation acts on: an EXACT rule names one resource
of that kind, and a DIRECT_MEMBERS_OF rule names a container whose direct members are of that
kind.
Users
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
CREATE_USER | 101 | Create a human user | USER |
READ_USER | 102 | Read a user record | USER |
UPDATE_USER | 103 | Update a user's profile or labels | USER |
DELETE_USER | 104 | Permanently soft-delete a user | USER |
LIST_USER | 105 | Enumerate the user collection | INSTANCE |
MANAGE_USER_ENROLLMENT | 106 | Create, read, list, rotate, or revoke a user's enrollment credential | USER |
MANAGE_USER_ENROLLMENT targets the user being enrolled. It can be granted only to a concrete
principal, with the ANY or EXACT selector, and an EXACT grant must name a USER resource.
Completing an enrollment is authenticated by the enrollment credential itself and does not
evaluate this operation.
Service Identities
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
CREATE_SERVICE_IDENTITY | 201 | Create a service identity | SERVICE_IDENTITY |
READ_SERVICE_IDENTITY | 202 | Read a service identity | SERVICE_IDENTITY |
UPDATE_SERVICE_IDENTITY | 203 | Update a service identity's profile or labels | SERVICE_IDENTITY |
DELETE_SERVICE_IDENTITY | 204 | Permanently soft-delete a service identity | SERVICE_IDENTITY |
LIST_SERVICE_IDENTITY | 205 | Enumerate the service-identity collection | INSTANCE |
Spaces
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
CREATE_SPACE | 301 | Create a memory space | SPACE |
READ_SPACE | 302 | Read a space | SPACE |
UPDATE_SPACE | 303 | Update a space | SPACE |
DELETE_SPACE | 304 | Delete a space | SPACE |
LIST_SPACE | 305 | Enumerate the space catalog | INSTANCE |
API Keys
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
CREATE_API_KEY | 401 | Issue an API key | API_KEY |
READ_API_KEY | 402 | Read an API-key record | API_KEY |
UPDATE_API_KEY | 403 | Update an API key's mutable metadata | API_KEY |
DELETE_API_KEY | 404 | Revoke an API key | API_KEY |
LIST_API_KEY | 405 | Enumerate API-key records | API_KEY |
Embedders
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
CREATE_EMBEDDER | 501 | Register an embedder | EMBEDDER |
READ_EMBEDDER | 502 | Read an embedder's configuration | EMBEDDER |
UPDATE_EMBEDDER | 503 | Update an embedder | EMBEDDER |
DELETE_EMBEDDER | 504 | Delete an embedder | EMBEDDER |
LIST_EMBEDDER | 505 | Enumerate the embedder catalog | INSTANCE |
PING_EMBEDDER | 506 | Health-check an embedder endpoint | EMBEDDER |
EXECUTE_EMBEDDER | 507 | Run inference through an embedder | EMBEDDER |
READ_EMBEDDER_CREDENTIALS | 508 | Read an embedder's stored upstream credentials | EMBEDDER |
Rerankers
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
CREATE_RERANKER | 601 | Register a reranker | RERANKER |
READ_RERANKER | 602 | Read a reranker's configuration | RERANKER |
UPDATE_RERANKER | 603 | Update a reranker | RERANKER |
DELETE_RERANKER | 604 | Delete a reranker | RERANKER |
LIST_RERANKER | 605 | Enumerate the reranker catalog | INSTANCE |
PING_RERANKER | 606 | Health-check a reranker endpoint | RERANKER |
EXECUTE_RERANKER | 607 | Run inference through a reranker | RERANKER |
READ_RERANKER_CREDENTIALS | 608 | Read a reranker's stored upstream credentials | RERANKER |
LLMs
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
CREATE_LLM | 701 | Register an LLM | LLM |
READ_LLM | 702 | Read an LLM's configuration | LLM |
UPDATE_LLM | 703 | Update an LLM | LLM |
DELETE_LLM | 704 | Delete an LLM | LLM |
LIST_LLM | 705 | Enumerate the LLM catalog | INSTANCE |
PING_LLM | 706 | Health-check an LLM endpoint | LLM |
EXECUTE_LLM | 707 | Run inference through an LLM | LLM |
READ_LLM_CREDENTIALS | 708 | Read an LLM's stored upstream credentials | LLM |
The READ_*_CREDENTIALS operations are separate from the ordinary READ_* operations. Reading a
provider's configuration does not reveal its stored credentials, and direct grants cannot confer
credential-read authority.
Inference
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
PROXY_INFERENCE_TARGET | 801 | Proxy a request through an embedder, reranker, or LLM | embedder, reranker, or LLM |
OCR_DOCUMENT | 802 | Run the instance-level OCR utility | INSTANCE |
Memories
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
CREATE_MEMORY | 901 | Create a memory | MEMORY |
READ_MEMORY | 902 | Read a memory | MEMORY |
DELETE_MEMORY | 903 | Delete a memory | MEMORY |
LIST_MEMORY | 904 | Search or enumerate a space's memory collection | SPACE |
There is no UPDATE_MEMORY; a memory is deleted and recreated. LIST_MEMORY targets the space
whose collection is searched, so an EXACT rule for it names a space. Semantic retrieval requires
both LIST_MEMORY on each requested space and READ_MEMORY on the returned memories.
Extensions
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
CREATE_EXTENSION | 1001 | Register an extension | EXTENSION |
READ_EXTENSION | 1002 | Read an extension | EXTENSION |
UPDATE_EXTENSION | 1003 | Update an extension | EXTENSION |
DELETE_EXTENSION | 1004 | Delete an extension | EXTENSION |
LIST_EXTENSION | 1005 | Enumerate the extension catalog | INSTANCE |
DOWNLOAD_EXTENSION | 1006 | Download an extension's artifact | EXTENSION |
Instance and Ownership
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
READ_INSTANCE | 1101 | Read the singleton GoodMem instance record | INSTANCE |
TRANSFER_INSTANCE_OWNERSHIP | 1102 | Transfer ownership of the instance | INSTANCE |
TRANSFER_RESOURCE_OWNERSHIP | 1103 | Transfer ownership of an ordinary owned resource | any owned resource |
The two transfer operations cannot appear in direct grants. Transfer authority comes from current
ownership, from instance ownership, or — for ordinary resources — from the instance ADMIN role.
Server Administration
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
RELOAD_LICENSE | 1401 | Reload the instance's license material | INSTANCE |
DRAIN_SERVER | 1402 | Start a graceful drain of the server | INSTANCE |
PURGE_BACKGROUND_JOBS | 1403 | Purge completed background jobs | INSTANCE |
RetrieveMemory Log Policies
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
CREATE_RETRIEVE_MEMORY_LOG_POLICY | 1501 | Create a query-logging policy | RETRIEVE_MEMORY_LOG_POLICY |
READ_RETRIEVE_MEMORY_LOG_POLICY | 1502 | Read a query-logging policy | RETRIEVE_MEMORY_LOG_POLICY |
LIST_RETRIEVE_MEMORY_LOG_POLICY | 1503 | Enumerate query-logging policies | RETRIEVE_MEMORY_LOG_POLICY |
DELETE_RETRIEVE_MEMORY_LOG_POLICY | 1504 | Delete a query-logging policy | RETRIEVE_MEMORY_LOG_POLICY |
See RetrieveMemory Query Logging for the policy model.
Access Administration
| Operation | # | Authorizes | Resource kind |
|---|---|---|---|
MANAGE_ACCESS | 1601 | Read and change a resource's grants and role assignments | any resource |
The protected target is the resource whose policy changes rather than a grant or role-assignment row.
Like MANAGE_USER_ENROLLMENT, this operation can be granted only to a concrete principal with the
ANY or EXACT selector.
Rule Syntax
The CLI flags that accept whole rules — --ceiling on goodmem apikey create and --grant on
goodmem service-identity onboard — use one colon-delimited grammar:
OPERATION:SELECTOR[:RESOURCE_KIND[:RESOURCE_UUID]]ANYandOWNrules take exactly two segments. Adding a resource kind or UUID is an error.EXACTandDIRECT_MEMBERS_OFrules require a resource-kind segment. The kindINSTANCEforbids a UUID segment; every other kind requires one.- Tokens are case-insensitive and accept kebab-case or underscores. The long enum prefixes
(
ACCESS_POLICY_OPERATION_,ACCESS_POLICY_SELECTOR_,ACCESS_POLICY_RESOURCE_KIND_) are optional.MEMORY_SPACEis accepted as an alias forSPACE.
Valid resource-kind tokens: INSTANCE, USER, SERVICE_IDENTITY, SPACE, API_KEY,
EMBEDDER, RERANKER, LLM, MEMORY, EXTENSION, RETRIEVE_MEMORY_LOG_POLICY.
Examples:
READ_SPACE:ANY
CREATE_API_KEY:OWN
READ_SPACE:EXACT:SPACE:70e025f6-76ca-4cbe-b8fc-7dab8e84590a
READ_MEMORY:DIRECT_MEMBERS_OF:SPACE:70e025f6-76ca-4cbe-b8fc-7dab8e84590a
LIST_SPACE:EXACT:INSTANCEThe goodmem access-policy grant create and role-assignment assign commands take the same
vocabulary as separate --operation, --selector, --resource-kind, and --resource-id flags.
Grant creation enforces a few shape rules on the server:
- Grants to the all-authenticated audience require
EXACTorDIRECT_MEMBERS_OF. - Direct grants cannot confer credential-read (
READ_*_CREDENTIALS) or ownership-transfer authority. MANAGE_ACCESSandMANAGE_USER_ENROLLMENTgrants require a concrete principal audience and theANYorEXACTselector.
Role capabilities are fixed in code; the per-role rule lists are in Built-in Roles.