Permissions & Access Control
ContextCore provides a comprehensive permission system for controlling access to tools, graphs, and service operations.
Permission Format
Permissions follow domain:action or domain:action:resource patterns:
from contextcore import Permissions
# Constants for common permissionsPermissions.BRAIN_READ # "brain:read"Permissions.BRAIN_WRITE # "brain:write"Permissions.TOOL_ALL # "tool:*"Permissions.ADMIN_ALL # "admin:all"Access Check Helpers
Tool Access
from contextcore import has_tool_access, has_tool_scope_access, check_tool_scope
# Basic tool access checkhas_tool_access(token.permissions, "brain_search") # True/False
# Scoped access (read, write, admin)from contextcore import ToolScopehas_tool_scope_access(token.permissions, "sql", ToolScope.ADMIN) # True/FalseGraph Access
from contextcore import has_graph_access
# Check if token can execute a specific graphhas_graph_access(token.permissions, "rag_retrieval") # True/Falsehas_graph_access(token.permissions, "commerce_search") # True/FalseRegistration Access
from contextcore import has_registration_access
# Check if token can register tools for a projecthas_registration_access(token.permissions, "my_project") # True/FalseTool Policies
Tool policies classify operations by risk level and control enforcement:
from contextcore import ToolPolicy, ToolRisk, ToolScope
# Risk levelsToolRisk.LOW # Read-only operationsToolRisk.MEDIUM # Data modificationToolRisk.HIGH # System-level operationsToolRisk.CRITICAL # Destructive/irreversible
# ScopesToolScope.READ # Read-only accessToolScope.WRITE # Write accessToolScope.ADMIN # Administrative accesscheck_tool_scope
The main authorization + policy enforcement function:
from contextcore import check_tool_scope
# Returns: "allow", "hitl" (human-in-the-loop), or "deny"result = check_tool_scope( permissions=token.permissions, tool_name="sql", scope=ToolScope.ADMIN, policy=my_tool_policy, # optional ToolPolicy override)
if result == "deny": raise PermissionError("Access denied")elif result == "hitl": # Request human approval before proceeding await request_approval()User Namespaces
Namespace profiles define permission tiers:
from contextcore import UserNamespace, NAMESPACE_PROFILES
# Access tiersUserNamespace.FREE # Basic accessUserNamespace.PRO # Extended accessUserNamespace.ADMIN # Full tenant adminUserNamespace.SYSTEM # System-level (internal)NAMESPACE_PROFILES maps each namespace to a set of default permissions.
Permission Inheritance
from contextcore import PERMISSION_INHERITANCE, expand_permissions
# Permissions implicitly include child permissions# e.g., "graph:dispatcher" implies access to all sub-graphsexpanded = expand_permissions(token.permissions)PERMISSION_INHERITANCE defines which permissions inherit from others. For example, graph:dispatcher implies graph:rag_retrieval, graph:gardener, etc.
Project Profiles
from contextcore import PROJECT_PROFILES
# Pre-defined permission sets for common project types# Used during project registration to assign default permissions