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

6.9 KiB
Raw Permalink Blame History

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

GET /api/v1/admin/users
Authorization: Bearer <admin_jwt_token>

Response:

{
  "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

PATCH /api/v1/admin/users/:id/role
Authorization: Bearer <admin_jwt_token>
Content-Type: application/json

{
  "role": "moderator"
}

Response:

{
  "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

DELETE /api/v1/admin/users/:id
Authorization: Bearer <admin_jwt_token>

Response:

{
  "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

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

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:

UPDATE "user" 
SET role = 'admin' 
WHERE email = 'your-email@example.com';

Veya direkt database üzerinden:

// 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)

// 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

# 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:

# Schema'dan migration oluştur
yarn db:generate

# Migration'ı çalıştır
yarn db:push

Veya manuel olarak 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)