Permissions
Permissions & Access Control
Understand Mavibase's comprehensive permission system for controlling access to databases, collections, documents, and fields.
Overview
Mavibase provides multiple layers of access control:
- Project-Level: Team and project access
- Database-Level: Database permissions by role
- Row-Level Security (RLS): Document-level rules
- Field-Level: Control which fields users can access
Permission Model
Project Roles
Define access at the project level:
- Owner: Full administrative access
- Admin: Manage databases, users, and settings
- Editor: Create and modify documents
- Viewer: Read-only access
- Custom: Define custom role permissions
API Key Scopes
API keys support granular scope-based permissions:
bash
curl -X POST https://<API_ENDPOINT>/api/v1/platform/api-keys \
-H "Authorization: Bearer SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Read-Only API Key",
"scopes": [
"db:read",
"collections:read",
"documents:read"
]
}'Available Scopes
Database Operations:
db:create: Create databasesdb:read: Read database metadatadb:update: Update database settingsdb:delete: Delete databases
Collection Operations:
collections:create: Create collectionscollections:read: Read collectionscollections:update: Update collection schemacollections:delete: Delete collections
Document Operations:
documents:create: Create documentsdocuments:read: Read documentsdocuments:update: Update documentsdocuments:delete: Delete documents
Transaction Operations:
transactions:create: Create transactionstransactions:read: Read transaction history
Row-Level Security (RLS)
Define dynamic rules to control document access based on attributes:
Creating Permission Rules
bash
curl -X POST https://<API_ENDPOINT>/api/v1/db/permissions \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"collection": "posts",
"role": "user",
"rules": [
{
"action": "read",
"condition": {
"field": "author_id",
"operator": "equals",
"value": "{{ auth.userId }}"
}
}
]
}'Permission Actions
- read: View documents
- create: Create new documents
- update: Modify documents
- delete: Delete documents
Condition Operators
equals: Exact matchnotEquals: Not equalcontains: String containsin: Value in arraygt: Greater thangte: Greater than or equallt: Less thanlte: Less than or equalbetween: Range check
Dynamic Variables
Variables replaced at query time:
{{ auth.userId }}: Current user ID{{ auth.email }}: Current user email{{ auth.teamId }}: Current team ID{{ auth.projectId }}: Current project ID{{ auth.roles }}: User's roles
Example: Multi-Tenant Documents
javascript
{
"collection": "documents",
"role": "user",
"rules": [
{
"action": "read",
"condition": {
"field": "team_id",
"operator": "equals",
"value": "{{ auth.teamId }}"
}
},
{
"action": "update",
"condition": {
"field": "owner_id",
"operator": "equals",
"value": "{{ auth.userId }}"
}
}
]
}Field-Level Access Control
Restrict access to specific fields within documents:
bash
curl -X POST https://<API_ENDPOINT>/api/v1/db/field-access \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"collection": "users",
"role": "viewer",
"fieldAccess": {
"email": "hidden",
"phoneNumber": "hidden",
"salary": "hidden",
"bio": "visible"
}
}'Field Access Levels
- visible: Full access to field
- hidden: Field completely hidden
- redacted: Field returns null
- masked: Field returns masked value (e.g., "***@example.com")
Database Permissions
Control who can access entire databases:
bash
curl -X POST https://<API_ENDPOINT>/api/v1/db/databases/db_123/permissions \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"role": "editor",
"permissions": {
"read": true,
"create": true,
"update": true,
"delete": false
}
}'Best Practices
- Principle of Least Privilege: Grant minimum necessary permissions
- Use API Key Scopes: Create limited-scope keys for third-party integrations
- Implement RLS Rules: Use dynamic conditions for data isolation
- Hide Sensitive Fields: Use field-level access for PII
- Regular Audits: Review who has access to what
- Service Accounts: Use separate accounts for automated processes
- Key Rotation: Regularly rotate API keys
- Test Rules: Thoroughly test permission rules before deployment
Common Patterns
Read-Only API Key
javascript
{
"scopes": ["db:read", "collections:read", "documents:read"]
}User Can Only See Own Documents
javascript
{
"action": "read",
"condition": {
"field": "user_id",
"operator": "equals",
"value": "{{ auth.userId }}"
}
}Team-Based Access
javascript
{
"action": "read",
"condition": {
"field": "team_id",
"operator": "in",
"value": "{{ auth.teams }}"
}
}Admin Override
javascript
{
"condition": {
"field": "role",
"operator": "equals",
"value": "admin"
},
"action": "read"
}