| name | user-isolation-enforcer |
| description | enforce user isolation, filter by user_id, prevent data leak in query, multi-user task filter, always add WHERE user_id |
User Isolation Enforcer
Overview
This skill enforces user isolation in database queries by ensuring every query involving user data includes proper user_id filtering. It prevents data leaks by mandating WHERE clauses that restrict results to the current authenticated user.
Core Enforcement Rule
In EVERY database query involving tasks or user-related data, automatically add the filter:
.where(Model.user_id == current_user.id)
SQLModel Query Pattern
Use this pattern for all database operations:
from sqlmodel import select
from your_models import Task
results = session.exec(
select(Task)
.where(Task.user_id == current_user.id)
).all()
results = session.exec(select(Task)).all()
Required Query Patterns
List Operations
def list_user_tasks(session, current_user):
return session.exec(
select(Task)
.where(Task.user_id == current_user.id)
).all()
Get Operations
def get_user_task(session, task_id, current_user):
return session.exec(
select(Task)
.where(Task.user_id == current_user.id)
.where(Task.id == task_id)
).first()
Update Operations
def update_user_task(session, task_id, update_data, current_user):
task = session.exec(
select(Task)
.where(Task.user_id == current_user.id)
.where(Task.id == task_id)
).first()
if not task:
raise HTTPException(status_code=404, detail="Task not found")
session.add(task)
session.commit()
Delete Operations
def delete_user_task(session, task_id, current_user):
task = session.exec(
select(Task)
.where(Task.user_id == current_user.id)
.where(Task.id == task_id)
).first()
if not task:
raise HTTPException(status_code=404, detail="Task not found")
session.delete(task)
session.commit()
Security Warning
⚠️ Data leak here would violate multi-user isolation - Always verify that every query includes proper user_id filtering to prevent unauthorized access to other users' data.
Enforcement Checklist
Before executing any database query:
Violation Detection
If you see code without proper user filtering:
- Warning: "Missing user_id filter - this could cause data leak"
- Correction: Add
.where(Model.user_id == current_user.id) to the query
- Verification: Test that user A cannot access user B's data
Critical Reminder
Never return data from other users - Every query must be scoped to the current authenticated user to maintain proper multi-user isolation.