301 lines
7.0 KiB
Markdown
301 lines
7.0 KiB
Markdown
# Admin Kullanıcı Oluşturma
|
||
|
||
## Komut
|
||
|
||
Admin kullanıcı oluşturmak için:
|
||
|
||
```bash
|
||
./main seed-admin
|
||
```
|
||
|
||
## Varsayılan Admin Bilgileri
|
||
|
||
Komut çalıştırıldığında aşağıdaki bilgilerle admin kullanıcı oluşturulur:
|
||
|
||
- **Email:** `admin@gauth.local`
|
||
- **Password:** `Admin@123`
|
||
- **Username:** `admin`
|
||
- **Role:** `admin` (tüm yetkiler)
|
||
|
||
## Güvenlik Uyarısı
|
||
|
||
⚠️ **İlk login sonrası şifrenizi mutlaka değiştirin!**
|
||
|
||
## Login Testi
|
||
|
||
Admin ile login:
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/v1/auth/login \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"email": "admin@gauth.local",
|
||
"password": "Admin@123"
|
||
}'
|
||
```
|
||
|
||
**Başarılı Yanıt:**
|
||
```json
|
||
{
|
||
"access_token": "...",
|
||
"refresh_token": "...",
|
||
"user_id": "...",
|
||
"username": "admin",
|
||
"email": "admin@gauth.local",
|
||
"roles": [
|
||
{
|
||
"name": "admin",
|
||
"permissions": [
|
||
{"name": "user:read"},
|
||
{"name": "user:write"},
|
||
{"name": "admin:access"}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
## Admin Yetkili Endpoint'ler
|
||
|
||
Admin kullanıcısı aşağıdaki endpoint'lere erişebilir:
|
||
|
||
### Kullanıcı Yönetimi
|
||
|
||
```bash
|
||
# Tüm kullanıcıları listele
|
||
GET /v1/admin/users
|
||
|
||
# Kullanıcı ara
|
||
GET /v1/admin/users/search?q=email@example.com
|
||
|
||
# Kullanıcı detayı
|
||
GET /v1/admin/users/{user_id}
|
||
|
||
# Yeni kullanıcı oluştur
|
||
POST /v1/admin/users
|
||
|
||
# Kullanıcı güncelle
|
||
PUT /v1/admin/users/{user_id}
|
||
|
||
# Kullanıcı sil (soft delete)
|
||
DELETE /v1/admin/users/{user_id}
|
||
|
||
# Kullanıcı sil (hard delete - kalıcı)
|
||
DELETE /v1/admin/users/{user_id}?hard=true
|
||
|
||
# Kullanıcıya rol ata
|
||
POST /v1/admin/users/{user_id}/roles
|
||
|
||
# Kullanıcıdan rol kaldır
|
||
DELETE /v1/admin/users/{user_id}/roles/{role_name}
|
||
```
|
||
|
||
### CORS Ayarları
|
||
|
||
```bash
|
||
# CORS Whitelist
|
||
GET /v1/settings/cors/whitelist
|
||
POST /v1/settings/cors/whitelist
|
||
PUT /v1/settings/cors/whitelist/{id}
|
||
DELETE /v1/settings/cors/whitelist/{id}
|
||
|
||
# CORS Blacklist
|
||
GET /v1/settings/cors/blacklist
|
||
POST /v1/settings/cors/blacklist
|
||
PUT /v1/settings/cors/blacklist/{id}
|
||
DELETE /v1/settings/cors/blacklist/{id}
|
||
```
|
||
|
||
### Rate Limit Ayarları
|
||
|
||
```bash
|
||
# Rate limit ayarları
|
||
GET /v1/settings/ratelimit
|
||
PUT /v1/settings/ratelimit/{id}
|
||
```
|
||
|
||
## Örnek: Admin Token ile API Kullanımı
|
||
|
||
```bash
|
||
# 1. Admin login
|
||
RESPONSE=$(curl -s -X POST http://localhost:8080/v1/auth/login \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"email":"admin@gauth.local","password":"Admin@123"}')
|
||
|
||
# 2. Token'ı al
|
||
TOKEN=$(echo $RESPONSE | jq -r '.access_token')
|
||
|
||
# 3. Kullanıcıları listele
|
||
curl -X GET http://localhost:8080/v1/admin/users \
|
||
-H "Authorization: Bearer $TOKEN"
|
||
```
|
||
|
||
## Hard Delete (Kalıcı Silme) Örnekleri
|
||
|
||
### 1. Önce Kullanıcı ID'sini Bul
|
||
|
||
```bash
|
||
# Admin login ve token al
|
||
TOKEN=$(curl -s -X POST http://localhost:8080/v1/auth/login \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"email":"admin@gauth.local","password":"Admin@123"}' | jq -r '.access_token')
|
||
|
||
# Email ile kullanıcı ara
|
||
curl -X GET "http://localhost:8080/v1/admin/users/search?q=test@example.com" \
|
||
-H "Authorization: Bearer $TOKEN"
|
||
```
|
||
|
||
**Yanıt örneği:**
|
||
```json
|
||
{
|
||
"users": [
|
||
{
|
||
"id": "6df5465d-b8e6-44d2-970a-f682cb428e80",
|
||
"username": "testuser",
|
||
"email": "test@example.com",
|
||
"email_verified": false
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 2. Soft Delete (Varsayılan)
|
||
|
||
Kullanıcı `deleted_at` timestamp ile işaretlenir, veritabanından silinmez:
|
||
|
||
```bash
|
||
# Soft delete
|
||
curl -X DELETE "http://localhost:8080/v1/admin/users/6df5465d-b8e6-44d2-970a-f682cb428e80" \
|
||
-H "Authorization: Bearer $TOKEN"
|
||
```
|
||
|
||
**Başarılı Yanıt:**
|
||
```json
|
||
{
|
||
"message": "User deleted soft successfully"
|
||
}
|
||
```
|
||
|
||
### 3. Hard Delete (Kalıcı Silme)
|
||
|
||
Kullanıcı ve tüm ilişkili kayıtları (user_roles, social_accounts) kalıcı olarak silinir:
|
||
|
||
```bash
|
||
# Hard delete
|
||
curl -X DELETE "http://localhost:8080/v1/admin/users/6df5465d-b8e6-44d2-970a-f682cb428e80?hard=true" \
|
||
-H "Authorization: Bearer $TOKEN"
|
||
```
|
||
|
||
**Başarılı Yanıt:**
|
||
```json
|
||
{
|
||
"message": "User deleted permanently successfully"
|
||
}
|
||
```
|
||
|
||
### 4. Tam Örnek (Login'den Hard Delete'e)
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
|
||
# Admin login
|
||
echo "🔐 Admin login..."
|
||
LOGIN_RESPONSE=$(curl -s -X POST http://localhost:8080/v1/auth/login \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"email":"admin@gauth.local","password":"Admin@123"}')
|
||
|
||
TOKEN=$(echo $LOGIN_RESPONSE | jq -r '.access_token')
|
||
|
||
if [ "$TOKEN" = "null" ]; then
|
||
echo "❌ Login failed!"
|
||
exit 1
|
||
fi
|
||
|
||
echo "✅ Login successful!"
|
||
echo "Token: ${TOKEN:0:20}..."
|
||
|
||
# Kullanıcı ara
|
||
echo ""
|
||
echo "🔍 Searching user..."
|
||
SEARCH_RESULT=$(curl -s -X GET "http://localhost:8080/v1/admin/users/search?q=test@example.com" \
|
||
-H "Authorization: Bearer $TOKEN")
|
||
|
||
USER_ID=$(echo $SEARCH_RESULT | jq -r '.users[0].id')
|
||
|
||
if [ "$USER_ID" = "null" ]; then
|
||
echo "❌ User not found!"
|
||
exit 1
|
||
fi
|
||
|
||
echo "✅ User found!"
|
||
echo "User ID: $USER_ID"
|
||
|
||
# Hard delete
|
||
echo ""
|
||
echo "🗑️ Hard deleting user..."
|
||
DELETE_RESULT=$(curl -s -X DELETE "http://localhost:8080/v1/admin/users/$USER_ID?hard=true" \
|
||
-H "Authorization: Bearer $TOKEN")
|
||
|
||
echo "Response: $DELETE_RESULT"
|
||
|
||
# Verify deletion
|
||
echo ""
|
||
echo "✔️ Verifying deletion..."
|
||
VERIFY=$(curl -s -X GET "http://localhost:8080/v1/admin/users/$USER_ID" \
|
||
-H "Authorization: Bearer $TOKEN")
|
||
|
||
echo "Verification: $VERIFY"
|
||
```
|
||
|
||
### 5. Toplu Silme Scripti
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
|
||
# Kullanıcıları listele ve hard delete yap
|
||
TOKEN=$(curl -s -X POST http://localhost:8080/v1/auth/login \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"email":"admin@gauth.local","password":"Admin@123"}' | jq -r '.access_token')
|
||
|
||
# Test kullanıcılarını sil (email'i test içeren)
|
||
USER_IDS=$(curl -s -X GET "http://localhost:8080/v1/admin/users/search?q=test" \
|
||
-H "Authorization: Bearer $TOKEN" | jq -r '.users[].id')
|
||
|
||
for USER_ID in $USER_IDS; do
|
||
echo "Deleting user: $USER_ID"
|
||
curl -s -X DELETE "http://localhost:8080/v1/admin/users/$USER_ID?hard=true" \
|
||
-H "Authorization: Bearer $TOKEN"
|
||
echo ""
|
||
done
|
||
```
|
||
|
||
## Hard Delete ile Soft Delete Farkları
|
||
|
||
| Özellik | Soft Delete | Hard Delete |
|
||
|---------|-------------|-------------|
|
||
| **Komut** | `DELETE /v1/admin/users/{id}` | `DELETE /v1/admin/users/{id}?hard=true` |
|
||
| **Veritabanı** | `deleted_at` timestamp set edilir | Tamamen silinir |
|
||
| **İlişkili Kayıtlar** | Korunur | Silinir (user_roles, social_accounts) |
|
||
| **Geri Getirme** | Mümkün (restore edilebilir) | İmkansız |
|
||
| **Kullanım** | Güvenli, varsayılan | Dikkatli kullanılmalı |
|
||
|
||
## Güvenlik Notları
|
||
|
||
⚠️ **HARD DELETE DİKKAT:**
|
||
- Hard delete **geri alınamaz**
|
||
- Tüm kullanıcı verileri kalıcı olarak silinir
|
||
- İlişkili tüm kayıtlar (roller, sosyal hesaplar) silinir
|
||
- Üretim ortamında dikkatli kullanılmalıdır
|
||
- Yedek almadan hard delete yapmayın
|
||
|
||
## Notlar
|
||
|
||
- Admin kullanıcı email doğrulaması gerektirmez (`email_verified: true`)
|
||
- Admin kullanıcı zaten varsa komut hata vermez
|
||
- Soft-deleted admin varsa restore edilir
|
||
- Admin rolü otomatik olarak atanır
|
||
|
||
## Şifre Değiştirme
|
||
|
||
Admin şifresini değiştirmek için user update endpoint'ini kullanabilirsiniz veya başka bir admin oluşturabilirsiniz.
|