diff --git a/app/backend/main.py b/app/backend/main.py
index 2cf270aad86fa6f2c97a3177e54bd35781238d1c..30997e5e1cf6cbbda5e0551b18dbae0b967dad5b 100644
--- a/app/backend/main.py
+++ b/app/backend/main.py
@@ -5,7 +5,7 @@ sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 
 from fastapi import FastAPI
 from fastapi.staticfiles import StaticFiles
-from backend.routes import auth, shop, product, category, search, order, payment
+from backend.routes import auth, shop, product, category, search, order, payment, user
 from backend.database import init_db
 from core.config import settings
 
@@ -22,6 +22,7 @@ init_db()
 # Include API routes
 app.include_router(search.router, prefix="/search", tags=["search"])
 app.include_router(auth.router, prefix="/auth", tags=["auth"])
+app.include_router(user.router, prefix="/user", tags=["user"])
 app.include_router(payment.router, prefix="/payment", tags=["payment"])
 app.include_router(shop.router, prefix="/shops", tags=["shops"])
 app.include_router(product.router, prefix="/product", tags=["product"])
diff --git a/app/backend/routes/auth.py b/app/backend/routes/auth.py
index 7dfc67be951acc8e333e9146a162a65f0e48ae20..f999ae5895f25529b45b20000ed72e71218e5d41 100644
--- a/app/backend/routes/auth.py
+++ b/app/backend/routes/auth.py
@@ -29,6 +29,13 @@ def get_current_user(
     return user
 
 
+def admin_required(current_user: User):
+    if current_user.role != "admin":
+        raise HTTPException(
+            status_code=403, detail="Unauthorized. Admin access required."
+        )
+
+
 @router.post("/signup")
 def signup(user_data: UserCreate, session: Session = Depends(get_session)):
     existing_user = session.exec(
diff --git a/app/backend/routes/category.py b/app/backend/routes/category.py
index 5aa3a5a1b47327075a824f494e3254bfc3eacdc7..7dc3baae402a7bad986076068fc72ffcd2cb71b4 100644
--- a/app/backend/routes/category.py
+++ b/app/backend/routes/category.py
@@ -3,25 +3,18 @@ from sqlmodel import Session
 from backend.models.models import Category, User
 from backend.schemas.category import CategoryRead
 from backend.database import get_session
-from backend.routes.auth import get_current_user
+from backend.routes.auth import get_current_user, admin_required
 
 router = APIRouter()
 
 
-def verify_admin(current_user: User):
-    if current_user.role != "admin":
-        raise HTTPException(
-            status_code=403, detail="Unauthorized. Admin access required."
-        )
-
-
 @router.post("/create", response_model=CategoryRead)
 def create_category(
     name: str = Form(...),
     session: Session = Depends(get_session),
     current_user: User = Depends(get_current_user),
 ):
-    verify_admin(current_user)
+    admin_required(current_user)
 
     category = Category(name=name)
     session.add(category)
@@ -45,7 +38,7 @@ def update_category(
     session: Session = Depends(get_session),
     current_user: User = Depends(get_current_user),
 ):
-    verify_admin(current_user)
+    admin_required(current_user)
     category = session.get(Category, category_id)
     if not category:
         raise HTTPException(status_code=404, detail="Category not found")
@@ -65,7 +58,7 @@ def delete_category(
     session: Session = Depends(get_session),
     current_user: User = Depends(get_current_user),
 ):
-    verify_admin(current_user)
+    admin_required(current_user)
 
     category = session.get(Category, category_id)
     if not category:
diff --git a/app/backend/routes/user.py b/app/backend/routes/user.py
new file mode 100644
index 0000000000000000000000000000000000000000..f7bc71274156e7e7e82e4c0d9d0f2341919cad87
--- /dev/null
+++ b/app/backend/routes/user.py
@@ -0,0 +1,76 @@
+from fastapi import APIRouter, HTTPException, Depends
+from sqlmodel import Session
+from app.backend.schemas.user import UserResponse, UserUpdate
+from backend.database import get_session
+from backend.models.models import User
+from backend.routes.auth import get_current_user, admin_required
+
+router = APIRouter()
+
+
+# Get all users
+@router.get("/", response_model=list[UserResponse])
+def get_all_users(db: Session = Depends(get_session)):
+    users = db.query(User).all()
+    return users
+
+
+# Get one user by ID
+@router.get("/{user_id}", response_model=UserResponse)
+def get_user(user_id: int, db: Session = Depends(get_session)):
+    user = db.query(User).filter(User.id == user_id).first()
+    if not user:
+        raise HTTPException(status_code=404, detail="User not found")
+    return user
+
+
+# Update a user
+@router.put("/{user_id}", response_model=UserResponse)
+def update_user(
+    user_id: int, user_update: UserUpdate, db: Session = Depends(get_session)
+):
+    user = db.query(User).filter(User.id == user_id).first()
+    if not user:
+        raise HTTPException(status_code=404, detail="User not found")
+    for key, value in user_update.dict(exclude_unset=True).items():
+        setattr(user, key, value)
+    db.commit()
+    db.refresh(user)
+    return user
+
+
+# Update a user's role (Admin only)
+@router.patch("/{user_id}/role", response_model=UserResponse)
+def update_user_role(
+    user_id: int,
+    new_role: str,
+    db: Session = Depends(get_session),
+    current_user: User = Depends(admin_required),  # Ensure only admins can access
+):
+    # Validate the new role
+    valid_roles = ["customer", "shop_owner", "admin"]
+    if new_role not in valid_roles:
+        raise HTTPException(status_code=400, detail="Invalid role")
+
+    # Fetch the user
+    user = db.query(User).filter(User.id == user_id).first()
+    if not user:
+        raise HTTPException(status_code=404, detail="User not found")
+
+    # Update the role
+    user.role = new_role
+    db.add(user)
+    db.commit()
+    db.refresh(user)
+    return user
+
+
+# Delete a user
+@router.delete("/{user_id}", status_code=204)
+def delete_user(user_id: int, db: Session = Depends(get_session)):
+    user = db.query(User).filter(User.id == user_id).first()
+    if not user:
+        raise HTTPException(status_code=404, detail="User not found")
+    db.delete(user)
+    db.commit()
+    return