newOS for Developers
Back to Graph Traversal
Access Graph
Query mood access permissions via edges
intermediate
folder+{id}+access+userOverview
Access edges define which users can view private moods. The access graph is used to enforce permissions and build shared content experiences.
Access can be granted individually or through group memberships (coming soon).
Edge Pattern
// Edge key format
folder+{folderId}+access+user
// Example: check access for mood abc123
folder+abc123+access+user
// Returns array of user IDs with access
["user-1", "user-2", "user-3"]
// Inverse query: moods a user has access to
user+{userId}+hasAccess+folderUsage Example
import { getEdges, setEdges } from "@/lib/cache";
import { grantAccess, revokeAccess, getGrantees } from "@newgraph-signals/actions/folder";
// Check who has access to a mood
const accessList = await getEdges(
"folder",
"mood-123",
"access",
"user"
);
// Check if a specific user has access
const hasAccess = accessList.includes("user-456");
// Grant access via action
await grantAccess({
moodId: "mood-123",
userId: "user-456"
});
// Revoke access
await revokeAccess({
moodId: "mood-123",
userId: "user-456"
});
// List grantees with full profile data
const grantees = getGrantees({ moodId: "mood-123" });Access Control Flow
┌───────────────────┐
│ Private Mood │
│ privacy: private │
└────────┬──────────┘
│
▼
┌───────────────────┐
│ Access Edges │ folder+id+access+user
└────────┬──────────┘
│
┌────────┴────────┐
▼ ▼
┌─────────┐ ┌─────────┐
│ User A │ │ User B │ (can view mood)
└─────────┘ └─────────┘
// On request:
1. Check mood.privacy
2. If "private", query access edge
3. If userId in access list → allow
4. Else → 403 Forbidden