Files
image-apiv3/ADMIN_PANEL.md
Beyhan Oğur 031582ea2c first commit
2026-04-26 22:11:03 +03:00

314 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)