newOS for Developers

Back to Graph Traversal

Access Graph

Query mood access permissions via edges

intermediatefolder+{id}+access+user

Overview

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+folder

Usage 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