first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 22:11:03 +03:00
commit 031582ea2c
98 changed files with 13281 additions and 0 deletions

313
ADMIN_PANEL.md Normal file
View File

@@ -0,0 +1,313 @@
# Admin Panel & Role-Based Access Control (RBAC)
## Genel Bakış
Bu proje artık kapsamlı bir rol tabanlı erişim kontrol (RBAC) sistemine sahiptir. Kullanıcılar rollere atanabilir ve bu roller belirli izinler sağlar.
## Roller
### 1. **User** (Varsayılan)
- Sadece kendi resimlerini yükleyebilir
- Sadece kendi resimlerini görebilir
- Sadece kendi resimlerini silebilir
### 2. **Moderator**
- Kendi resimlerini yükleyebilir
- **TÜM** kullanıcıların resimlerini görebilir
- **TÜM** resimleri silebilir
- Moderasyon yetkisi
### 3. **Admin**
- **TÜM** moderator izinlerine sahiptir
- Kullanıcıları yönetebilir (listeleme, silme)
- Kullanıcı rollerini değiştirebilir
- Tam sistem kontrolü
## İzinler
| İzin | User | Moderator | Admin |
|------|------|-----------|-------|
| `IMAGE_UPLOAD` | ✅ | ✅ | ✅ |
| `IMAGE_VIEW_OWN` | ✅ | ✅ | ✅ |
| `IMAGE_VIEW_ANY` | ❌ | ✅ | ✅ |
| `IMAGE_DELETE_OWN` | ✅ | ✅ | ✅ |
| `IMAGE_DELETE_ANY` | ❌ | ✅ | ✅ |
| `USER_VIEW` | ❌ | ❌ | ✅ |
| `USER_DELETE` | ❌ | ❌ | ✅ |
| `USER_MANAGE_ROLES` | ❌ | ❌ | ✅ |
| `USER_MANAGE_PERMISSIONS` | ❌ | ❌ | ✅ |
| `USER_MANAGE_API_KEYS` | ❌ | ❌ | ✅ |
## Admin Panel
Admin paneline erişim: **http://localhost:3000/admin**
### Özellikler
1. **Kullanıcı Listesi**
- Tüm kullanıcıları görüntüleme
- Kullanıcı detayları (email, rol, doğrulama durumu, kayıt tarihi)
2. **Rol Yönetimi**
- Dropdown menüden rol seçerek anında güncelleme
- Kendi rolünü değiştirememe koruması
3. **Kullanıcı Silme**
- Kullanıcıyı ve tüm verilerini silme
- Kullanıcının resimleri ve API anahtarları da silinir
- Kendi hesabını silememe koruması
4. **İstatistikler**
- Toplam kullanıcı sayısı
- Admin sayısı
- Moderatör sayısı
## API Endpoint'leri
### Admin API
#### 1. Kullanıcıları Listele
```http
GET /api/v1/admin/users
Authorization: Bearer <admin_jwt_token>
```
**Response:**
```json
{
"success": true,
"data": {
"users": [
{
"id": "user-id",
"name": "John Doe",
"email": "john@example.com",
"role": "user",
"emailVerified": true,
"createdAt": "2024-01-01T00:00:00.000Z"
}
],
"total": 1
}
}
```
#### 2. Kullanıcı Rolünü Değiştir
```http
PATCH /api/v1/admin/users/:id/role
Authorization: Bearer <admin_jwt_token>
Content-Type: application/json
{
"role": "moderator"
}
```
**Response:**
```json
{
"success": true,
"message": "Kullanıcı rolü başarıyla güncellendi",
"data": {
"userId": "user-id",
"newRole": "moderator"
}
}
```
**Koşullar:**
- Sadece admin yetkisi
- Kendi rolünü değiştiremez
- Geçerli roller: `user`, `moderator`, `admin`
#### 3. Kullanıcı Sil
```http
DELETE /api/v1/admin/users/:id
Authorization: Bearer <admin_jwt_token>
```
**Response:**
```json
{
"success": true,
"message": "Kullanıcı başarıyla silindi",
"data": {
"deletedUserId": "user-id",
"deletedUser": "user@example.com"
}
}
```
**Koşullar:**
- Sadece admin yetkisi
- Kendi hesabını silemez
- Kullanıcının tüm resimleri ve API anahtarları da silinir
### Güncellenmiş Resim API'leri
#### 1. Resimleri Listele
```http
GET /api/v1/images
Authorization: Bearer <jwt_token>
```
**Davranış:**
- **User**: Sadece kendi resimlerini görür
- **Moderator/Admin**: TÜM resimleri görür
#### 2. Resim Sil
```http
DELETE /api/v1/images/:id
Authorization: Bearer <jwt_token>
```
**Davranış:**
- **User**: Sadece kendi resimlerini silebilir
- **Moderator/Admin**: Herhangi bir resmi silebilir
## İlk Admin Oluşturma
Veritabanında manuel olarak ilk admin kullanıcısını oluşturun:
```sql
UPDATE "user"
SET role = 'admin'
WHERE email = 'your-email@example.com';
```
Veya direkt database üzerinden:
```javascript
// Drizzle Studio veya migration ile
import { db } from "./db";
import { user } from "./db/schema";
import { eq } from "drizzle-orm";
await db.update(user)
.set({ role: "admin" })
.where(eq(user.email, "your-email@example.com"));
```
## Güvenlik Özellikleri
1. **Kendi Hesap Koruması**
- Admin kendi rolünü değiştiremez
- Admin kendi hesabını silemez
2. **Yetkilendirme Kontrolleri**
- Her endpoint permission kontrolü yapar
- 401 (Unauthorized): Giriş yapmamış
- 403 (Forbidden): Yetkisi yok
3. **Cascade Silme**
- Kullanıcı silindiğinde tüm resimleri ve API anahtarları da silinir
4. **Role Validasyonu**
- Sadece geçerli roller kabul edilir
- Geçersiz rol atama engellenir
## Kullanım Örnekleri
### JavaScript/TypeScript (Web)
```javascript
// Admin paneline giriş (token localStorage'da saklanıyor)
const token = localStorage.getItem("token");
// Kullanıcıları listele
const response = await fetch("/api/v1/admin/users", {
headers: {
Authorization: `Bearer ${token}`,
},
});
const { data } = await response.json();
console.log(data.users);
// Rol değiştir
await fetch("/api/v1/admin/users/user-id/role", {
method: "PATCH",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({ role: "moderator" }),
});
// Kullanıcı sil
await fetch("/api/v1/admin/users/user-id", {
method: "DELETE",
headers: {
Authorization: `Bearer ${token}`,
},
});
```
### cURL
```bash
# Kullanıcıları listele
curl -H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
http://localhost:3000/api/v1/admin/users
# Rol değiştir
curl -X PATCH \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"role":"moderator"}' \
http://localhost:3000/api/v1/admin/users/USER_ID/role
# Kullanıcı sil
curl -X DELETE \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
http://localhost:3000/api/v1/admin/users/USER_ID
```
## Migration
Role field'ını veritabanına eklemek için:
```bash
# Schema'dan migration oluştur
yarn db:generate
# Migration'ı çalıştır
yarn db:push
```
Veya manuel olarak SQL:
```sql
ALTER TABLE "user"
ADD COLUMN IF NOT EXISTS role TEXT DEFAULT 'user';
```
## Dosya Yapısı
```
app/
├── lib/
│ ├── permissions.ts # RBAC sistem tanımları
│ └── api-auth.ts # Auth middleware (role içerir)
├── api/
│ └── v1/
│ └── admin/
│ └── users/
│ ├── route.ts # GET (list)
│ └── [id]/
│ ├── route.ts # DELETE
│ └── role/
│ └── route.ts # PATCH
└── admin/
└── page.tsx # Admin panel UI
```
## Sonraki Adımlar
1. ✅ Role sistemi eklendi
2. ✅ Permission kontrolleri eklendi
3. ✅ Admin panel oluşturuldu
4. ✅ Kullanıcı yönetimi API'leri eklendi
5. ⏳ Email bildirimleri (rol değişikliği, hesap silme)
6. ⏳ Audit log sistemi (kim ne yaptı?)
7. ⏳ Gelişmiş filtreleme (role göre, tarihe göre)