CLI: Permissions (ReBAC)¶
← CLI Reference | API Documentation
This document describes CLI commands for ReBAC (Relationship-Based Access Control) permissions and their Python API equivalents.
rebac create - Create relationship¶
Create a relationship tuple between subject and object.
CLI:
# Make alice a member of eng-team
nexus rebac create agent alice member-of group eng-team
# Give alice viewer access to file
nexus rebac create agent alice direct_viewer file file123
# With tenant isolation (via flag)
nexus rebac create agent alice member-of group eng-team --tenant-id org_acme
# With tenant isolation (via environment variable)
export NEXUS_TENANT_ID=org_acme
nexus rebac create agent alice member-of group eng-team
# With expiration
nexus rebac create agent bob direct_viewer file secret --expires 2025-12-31T23:59:59
Python API:
# Create relationship
nx.create_relationship(
subject=("agent", "alice"),
relation="member-of",
object=("group", "eng-team")
)
# Give viewer access
nx.create_relationship(
subject=("agent", "alice"),
relation="viewer",
object=("file", "file123")
)
# With tenant isolation
nx.create_relationship(
subject=("agent", "alice"),
relation="member-of",
object=("group", "eng-team"),
tenant_id="org_acme"
)
# With expiration
from datetime import datetime
nx.create_relationship(
subject=("agent", "bob"),
relation="viewer",
object=("file", "secret"),
expires_at=datetime(2025, 12, 31, 23, 59, 59)
)
See Also: - Python API: create_relationship()
rebac check - Check permission¶
Check if a subject has permission on an object.
CLI:
Python API:
# Check permission
has_permission = nx.check_permission(
subject=("agent", "alice"),
permission="read",
object=("file", "file123")
)
print(f"Has permission: {has_permission}")
See Also: - Python API: check_permission()
rebac explain - Explain permission check¶
Explain why a permission check succeeds or fails.
CLI:
# Explain why alice has read permission on file
nexus rebac explain agent alice read file file123
# Show detailed path information
nexus rebac explain agent alice read file file123 --verbose
# Explain why permission is denied
nexus rebac explain agent bob write workspace main
Python API:
# Explain permission
explanation = nx.explain_permission(
subject=("agent", "alice"),
permission="read",
object=("file", "file123")
)
print(f"Granted: {explanation['granted']}")
print(f"Reason: {explanation['reason']}")
if explanation.get('path'):
print(f"Path: {explanation['path']}")
Options: - --verbose: Show detailed explanation with full path
See Also: - Python API: explain_permission()
rebac expand - Find all subjects with permission¶
Find all subjects that have a specific permission on an object.
CLI:
Python API:
# Expand permission
subjects = nx.expand_permission(
permission="read",
object=("file", "file123")
)
for subject in subjects:
print(f"{subject[0]}:{subject[1]}")
See Also: - Python API: expand_permission()
rebac delete - Delete relationship¶
Delete a relationship tuple.
CLI:
Python API:
# Delete relationship
nx.delete_relationship(tuple_id="123")
# Or delete by components
nx.delete_relationship(
subject=("agent", "alice"),
relation="viewer",
object=("file", "file123")
)
See Also: - Python API: delete_relationship()
rebac namespace-create - Create custom namespace¶
Create a custom namespace with relations and permissions.
CLI:
# Create from config file (JSON/YAML)
nexus rebac namespace-create document --config-file document.json
# Create inline
nexus rebac namespace-create project \
--relations owner \
--relations maintainer \
--relations contributor \
--relations viewer:union:maintainer,contributor,owner \
--permission read:viewer \
--permission write:maintainer,owner \
--permission admin:owner
Config file format (JSON):
{
"relations": {
"owner": {},
"editor": {},
"viewer": {"union": ["editor", "owner"]}
},
"permissions": {
"read": ["viewer", "editor", "owner"],
"write": ["editor", "owner"],
"delete": ["owner"]
}
}
Python API:
# Create namespace from dict
nx.create_namespace(
object_type="document",
config={
"relations": {
"owner": {},
"editor": {},
"viewer": {"union": ["editor", "owner"]}
},
"permissions": {
"read": ["viewer", "editor", "owner"],
"write": ["editor", "owner"],
"delete": ["owner"]
}
}
)
See Also: - Python API: create_namespace()
rebac namespace-list - List namespaces¶
List all defined namespaces.
CLI:
Python API:
# List namespaces
namespaces = nx.list_namespaces()
for ns in namespaces:
print(f"{ns['object_type']}: {ns['relations']}")
See Also: - Python API: list_namespaces()
rebac namespace-get - View namespace config¶
View the configuration of a specific namespace.
CLI:
# View file namespace (YAML)
nexus rebac namespace-get file
# JSON output
nexus rebac namespace-get memory --format json
Python API:
# Get namespace config
config = nx.get_namespace("file")
print(f"Relations: {config['relations']}")
print(f"Permissions: {config['permissions']}")
See Also: - Python API: get_namespace()
rebac namespace-delete - Delete namespace¶
Delete a namespace definition.
CLI:
# Delete with confirmation
nexus rebac namespace-delete document
# Skip confirmation
nexus rebac namespace-delete document --yes
Python API:
Note: This does not delete existing tuples for this object type.
See Also: - Python API: delete_namespace()
Common Workflows¶
Set up team permissions¶
# Create team groups
nexus rebac create agent alice member-of group eng-team
nexus rebac create agent bob member-of group eng-team
nexus rebac create agent charlie member-of group product-team
# Give team access to workspace
nexus rebac create group eng-team direct_editor workspace eng-workspace
nexus rebac create group product-team direct_viewer workspace product-workspace
# Check access
nexus rebac check agent alice write workspace eng-workspace
nexus rebac explain agent alice write workspace eng-workspace
Python equivalent¶
# Create team groups
teams = [
(("agent", "alice"), "member-of", ("group", "eng-team")),
(("agent", "bob"), "member-of", ("group", "eng-team")),
(("agent", "charlie"), "member-of", ("group", "product-team")),
]
for subject, relation, obj in teams:
nx.create_relationship(subject, relation, obj)
# Give team access to workspaces
nx.create_relationship(
("group", "eng-team"),
"editor",
("workspace", "eng-workspace")
)
nx.create_relationship(
("group", "product-team"),
"viewer",
("workspace", "product-workspace")
)
# Check access
can_write = nx.check_permission(
("agent", "alice"),
"write",
("workspace", "eng-workspace")
)
print(f"Alice can write: {can_write}")
# Explain access
explanation = nx.explain_permission(
("agent", "alice"),
"write",
("workspace", "eng-workspace")
)
print(f"Reason: {explanation['reason']}")