# 👥 Kullanıcı Yönetimi (Admin) API Dokümantasyonu ## 🔐 Default Admin Kullanıcı Uygulama ilk kez çalıştırıldığında otomatik olarak bir admin kullanıcı oluşturulur: ``` Email: admin@gauth.local Password: Admin@123 Role: admin ``` ⚠️ **Güvenlik Uyarısı:** İlk giriş sonrası bu şifreyi mutlaka değiştirin! --- ## 🚀 Admin ile Giriş Yapma ```bash curl -X POST http://localhost:8080/v1/auth/login \ -H "Content-Type: application/json" \ -d '{ "email": "admin@gauth.local", "password": "Admin@123" }' ``` **Response:** ```json { "access_token": "eyJhbGciOiJIUz...", "refresh_token": "eyJhbGciOiJIUz...", "user": { "id": "uuid", "email": "admin@gauth.local", "user_name": "admin", "roles": [ { "name": "admin", "description": "Default admin role" } ] } } ``` **Not:** Gelen `access_token`'ı tüm admin işlemlerde kullanacaksınız. --- ## 📍 User Management Endpoint'leri Base URL: `/v1/admin/users` **Tüm endpoint'ler için gereklidir:** - ✅ Authentication (Bearer token) - ✅ Admin rolü --- ### 1. Tüm Kullanıcıları Listele ``` GET /v1/admin/users Authorization: Bearer {admin_token} ``` **Query Parameters:** - `page` (optional): Sayfa numarası (default: 1) - `limit` (optional): Sayfa başına kayıt (default: 10, max: 100) **Response (200):** ```json { "users": [ { "id": "uuid", "email": "user@example.com", "user_name": "username", "email_verified": true, "created_at": "2026-02-04T00:00:00Z", "roles": [ { "id": "uuid", "name": "user", "description": "Default user role" } ], "social_accounts": [] } ], "pagination": { "page": 1, "limit": 10, "total": 25, "totalPages": 3 } } ``` **cURL Örneği:** ```bash TOKEN="your_admin_token_here" curl -X GET "http://localhost:8080/v1/admin/users?page=1&limit=10" \ -H "Authorization: Bearer $TOKEN" ``` --- ### 2. Kullanıcı Ara ``` GET /v1/admin/users/search?q={search_query} Authorization: Bearer {admin_token} ``` **Query Parameters:** - `q` (required): Arama terimi (email veya username'de arar) - `page` (optional): Sayfa numarası - `limit` (optional): Sayfa başına kayıt **Response (200):** ```json { "users": [...], "pagination": { "page": 1, "limit": 10, "total": 5, "totalPages": 1 } } ``` **cURL Örneği:** ```bash curl -X GET "http://localhost:8080/v1/admin/users/search?q=john&page=1&limit=10" \ -H "Authorization: Bearer $TOKEN" ``` --- ### 3. Kullanıcı Detayı ``` GET /v1/admin/users/{user_id} Authorization: Bearer {admin_token} ``` **Response (200):** ```json { "id": "uuid", "email": "user@example.com", "user_name": "username", "email_verified": true, "created_at": "2026-02-04T00:00:00Z", "roles": [ { "id": "uuid", "name": "user", "permissions": [ { "name": "user:read", "description": "Can read user data" } ] } ], "social_accounts": [ { "provider": "google", "provider_user_id": "123456" } ] } ``` **cURL Örneği:** ```bash curl -X GET "http://localhost:8080/v1/admin/users/UUID_HERE" \ -H "Authorization: Bearer $TOKEN" ``` --- ### 4. Yeni Kullanıcı Oluştur (Admin Oluşturma) ``` POST /v1/admin/users Authorization: Bearer {admin_token} Content-Type: application/json ``` **Request Body:** ```json { "email": "newadmin@example.com", "password": "SecurePass123!", "user_name": "newadmin", "email_verified": true, "roles": ["admin"] } ``` **Field Açıklamaları:** - `email` (required): Email adresi - `password` (required): Şifre (min 6 karakter) - `user_name` (required): Kullanıcı adı - `email_verified` (optional): Email doğrulanmış mı? (default: false) - `roles` (optional): Roller dizisi (default: ["user"]) - Geçerli roller: `"admin"`, `"user"` **Response (201):** ```json { "id": "uuid", "email": "newadmin@example.com", "user_name": "newadmin", "email_verified": true, "roles": [ { "id": "uuid", "name": "admin", "description": "Default admin role" } ], "created_at": "2026-02-04T00:00:00Z" } ``` **cURL Örneği - Yeni Admin Oluşturma:** ```bash curl -X POST http://localhost:8080/v1/admin/users \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "email": "yeni-admin@example.com", "password": "GuvenlıSifre123!", "user_name": "yeniadmin", "email_verified": true, "roles": ["admin"] }' ``` **cURL Örneği - Normal Kullanıcı Oluşturma:** ```bash curl -X POST http://localhost:8080/v1/admin/users \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "email": "user@example.com", "password": "UserPass123!", "user_name": "normaluser", "email_verified": false, "roles": ["user"] }' ``` --- ### 5. Kullanıcı Güncelle ``` PUT /v1/admin/users/{user_id} Authorization: Bearer {admin_token} Content-Type: application/json ``` **Request Body (tüm alanlar optional):** ```json { "email": "newemail@example.com", "password": "NewPassword123!", "user_name": "newusername", "email_verified": true, "roles": ["admin", "user"] } ``` **Response (200):** ```json { "message": "User updated successfully", "user": { "id": "uuid", "email": "newemail@example.com", "username": "newusername", "email_verified": true, "roles": [ {"name": "admin"}, {"name": "user"} ], "updated_at": "2026-02-04T..." } } ``` **cURL Örneği:** ```bash # Sadece şifre değiştir curl -X PUT "http://localhost:8080/v1/admin/users/UUID_HERE" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "password": "YeniSifre123!" }' # Email doğrulaması aktif et curl -X PUT "http://localhost:8080/v1/admin/users/UUID_HERE" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "email_verified": true }' # Kullanıcıyı admin yap (rol güncelleme) curl -X PUT "http://localhost:8080/v1/admin/users/UUID_HERE" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "roles": ["admin"] }' # Tüm bilgileri güncelle curl -X PUT "http://localhost:8080/v1/admin/users/UUID_HERE" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "email": "beyhan@beyhan.dev", "user_name": "Beyhan Oğur", "roles": ["admin"], "email_verified": true }' ``` --- ### 6. Kullanıcıya Roller Ata ``` POST /v1/admin/users/{user_id}/roles Authorization: Bearer {admin_token} Content-Type: application/json ``` **Request Body:** ```json { "roles": ["admin", "user"] } ``` **Response (200):** ```json { "message": "Roles assigned successfully" } ``` **cURL Örneği - Kullanıcıyı Admin Yap:** ```bash curl -X POST "http://localhost:8080/v1/admin/users/UUID_HERE/roles" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "roles": ["admin"] }' ``` --- ### 7. Kullanıcıdan Rol Kaldır ``` DELETE /v1/admin/users/{user_id}/roles/{role_name} Authorization: Bearer {admin_token} ``` **Response (200):** ```json { "message": "Role removed successfully" } ``` **cURL Örneği - Admin Rolünü Kaldır:** ```bash curl -X DELETE "http://localhost:8080/v1/admin/users/UUID_HERE/roles/admin" \ -H "Authorization: Bearer $TOKEN" ``` --- ### 8. Kullanıcı Sil ``` DELETE /v1/admin/users/{user_id} Authorization: Bearer {admin_token} ``` **Response (200):** ```json { "message": "User deleted successfully" } ``` **Not:** Kendi hesabınızı silemezsiniz! **cURL Örneği:** ```bash curl -X DELETE "http://localhost:8080/v1/admin/users/UUID_HERE" \ -H "Authorization: Bearer $TOKEN" ``` --- ## 🔒 Admin Middleware Tüm `/v1/admin/*` ve `/v1/settings/*` endpoint'leri için: 1. ✅ `AuthMiddleware` - Token kontrolü 2. ✅ `AdminMiddleware` - Admin rol kontrolü Eğer kullanıcı admin rolüne sahip değilse: ```json { "error": "Admin access required" } ``` --- ## 📊 Kullanım Senaryoları ### Senaryo 1: Yeni Admin Kullanıcı Oluşturma ```bash # 1. Admin olarak giriş yap curl -X POST http://localhost:8080/v1/auth/login \ -H "Content-Type: application/json" \ -d '{"email":"admin@gauth.local","password":"Admin@123"}' # Response'dan access_token al TOKEN="eyJhbGciOiJIUz..." # 2. Yeni admin kullanıcı oluştur curl -X POST http://localhost:8080/v1/admin/users \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "email": "ikinci-admin@example.com", "password": "Admin@456", "user_name": "admin2", "email_verified": true, "roles": ["admin"] }' # 3. Oluşturulan kullanıcı ile test et curl -X POST http://localhost:8080/v1/auth/login \ -H "Content-Type: application/json" \ -d '{"email":"ikinci-admin@example.com","password":"Admin@456"}' ``` ### Senaryo 2: Normal Kullanıcıyı Admin Yap ```bash # 1. Kullanıcıyı bul curl -X GET "http://localhost:8080/v1/admin/users/search?q=user@example.com" \ -H "Authorization: Bearer $TOKEN" # Response'dan user ID'yi al USER_ID="uuid-here" # 2. Admin rolü ata curl -X POST "http://localhost:8080/v1/admin/users/$USER_ID/roles" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"roles": ["admin", "user"]}' ``` ### Senaryo 3: Kullanıcı Şifresini Sıfırla ```bash curl -X PUT "http://localhost:8080/v1/admin/users/$USER_ID" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "password": "YeniGeçiciSifre123!" }' ``` --- ## 💻 Frontend Entegrasyonu ### JavaScript Örneği ```javascript const API_BASE = 'http://localhost:8080/v1/admin'; const token = localStorage.getItem('access_token'); // User Management Class class UserManagement { constructor(token) { this.token = token; this.headers = { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }; } // Tüm kullanıcıları getir async getAllUsers(page = 1, limit = 10) { const res = await fetch(`${API_BASE}/users?page=${page}&limit=${limit}`, { headers: { 'Authorization': `Bearer ${this.token}` } }); return res.json(); } // Kullanıcı ara async searchUsers(query, page = 1) { const res = await fetch(`${API_BASE}/users/search?q=${query}&page=${page}`, { headers: { 'Authorization': `Bearer ${this.token}` } }); return res.json(); } // Yeni admin kullanıcı oluştur async createAdmin(email, password, username) { const res = await fetch(`${API_BASE}/users`, { method: 'POST', headers: this.headers, body: JSON.stringify({ email, password, user_name: username, email_verified: true, roles: ['admin'] }) }); return res.json(); } // Kullanıcıyı admin yap async makeAdmin(userId) { const res = await fetch(`${API_BASE}/users/${userId}/roles`, { method: 'POST', headers: this.headers, body: JSON.stringify({ roles: ['admin'] }) }); return res.json(); } // Kullanıcı sil async deleteUser(userId) { const res = await fetch(`${API_BASE}/users/${userId}`, { method: 'DELETE', headers: { 'Authorization': `Bearer ${this.token}` } }); return res.json(); } // Şifre sıfırla async resetPassword(userId, newPassword) { const res = await fetch(`${API_BASE}/users/${userId}`, { method: 'PUT', headers: this.headers, body: JSON.stringify({ password: newPassword }) }); return res.json(); } } // Kullanım const userMgmt = new UserManagement(token); // Tüm kullanıcıları listele userMgmt.getAllUsers(1, 10).then(data => { console.log('Users:', data.users); console.log('Total:', data.pagination.total); }); // Yeni admin oluştur userMgmt.createAdmin('yeni@admin.com', 'Secure123!', 'yeniadmin') .then(user => console.log('Admin created:', user)); // Kullanıcı ara userMgmt.searchUsers('john').then(data => { console.log('Search results:', data.users); }); ``` --- ## 🎯 Endpoint Özeti | Method | Endpoint | Açıklama | |--------|----------|----------| | GET | `/v1/admin/users` | Tüm kullanıcıları listele | | GET | `/v1/admin/users/search` | Kullanıcı ara | | GET | `/v1/admin/users/:id` | Kullanıcı detayı | | POST | `/v1/admin/users` | Yeni kullanıcı/admin oluştur | | PUT | `/v1/admin/users/:id` | Kullanıcı güncelle | | DELETE | `/v1/admin/users/:id` | Kullanıcı sil | | POST | `/v1/admin/users/:id/roles` | Rol ata | | DELETE | `/v1/admin/users/:id/roles/:role` | Rol kaldır | **Toplam:** 8 endpoint --- ## ⚠️ Önemli Notlar 1. **Default Admin Şifresi**: İlk giriş sonrası mutlaka değiştirin! 2. **Kendi Hesabınızı Silemezsiniz**: Sistem bunu engelleyecektir 3. **Pagination**: Max limit 100, default 10 4. **Search**: Email ve username alanlarında case-insensitive arama yapar 5. **Roles**: Sadece "admin" ve "user" rolleri vardır 6. **Email Verified**: Admin oluştururken `true` yapın ki direkt giriş yapabilsin --- ## 🎊 Başarıyla Tamamlandı! Artık: - ✅ Default admin kullanıcısı var - ✅ Yeni admin kullanıcıları oluşturabilirsiniz - ✅ Kullanıcıları yönetebilirsiniz - ✅ Rolleri atayabilirsiniz - ✅ Frontend'den kontrol edebilirsiniz **İlk adım:** ```bash # Admin ile giriş yap curl -X POST http://localhost:8080/v1/auth/login \ -H "Content-Type: application/json" \ -d '{"email":"admin@gauth.local","password":"Admin@123"}' ``` **İyi yönetimler! 👥**