Bu doküman, kullanıcının kendi hesabını askıya alması (geçici) ve kalıcı kapatması özelliklerini açıklar. Askıya alınan hesap daha sonra tekrar açılabilir; kapatılan hesap kesinlikle açılamaz.
Hesabı askıya al (geçici)
Kullanıcı profil ayarlarından hesabını geçici olarak askıya alabilir.
İşlem: Mevcut şifre ile onay →
is_suspended = 1,suspended_at = now()→ oturum kapatılır, giriş sayfasına yönlendirilir.Tekrar açma: Giriş sayfasında “Hesabımı tekrar aç” bağlantısı veya doğrudan
/reactivate-accountsayfası; kullanıcı adı/e-posta + şifre ile hesap tekrar açılır ve giriş yapılır.
Hesabı kalıcı kapat
Kullanıcı profil ayarlarından hesabını kalıcı olarak kapatabilir.
İşlem: Mevcut şifre + onay metni (TR: KAPAT, EN: CLOSE) ile iki aşamalı onay →
closed_at = now()→ oturum kapatılır.Kalıcı kapatılan hesap tekrar açılamaz; giriş denemelerinde “Bu hesap kalıcı olarak kapatılmıştır” mesajı gösterilir.
Davranış (Auth)
Oturum (AuthService::user)
Giriş yapmış kullanıcı yüklenirken
closed_at !== nullise kullanıcı “giriş yapmamış” kabul edilir (null döner). Böylece kapatılmış hesaplar oturum kullanamaz.
Giriş (AuthService::login)
Sıra ile kontrol:
Kullanıcı yok →
falseis_banned→falseclosed_atdolu →'closed'(kalıcı kapatılmış)is_suspendeddolu →'suspended'(askıda)Şifre hatalı →
falseE-posta doğrulanmamış / onay bekliyor → ilgili kod
Başarılı → oturum açılır,
truedöner
AuthController
login:
'closed'→auth.account_closedmesajı, login sayfasına yönlendirme.'suspended'→auth.account_suspendedmesajı + flash ileauth_show_reactivate; login sayfasında “Hesabımı tekrar aç” linki gösterilir.reactivateForm: Askıya alınmış hesabı tekrar açma formu (kullanıcı adı/e-posta + şifre).
reactivate: Form POST;
AuthService::reactivateAccount()ile şifre doğrulanır, hesap askıdan çıkarılır (is_suspended = 0,suspended_at = null), oturum açılır ve ana sayfaya yönlendirilir.
Reactivate (AuthService::reactivateAccount)
Giriş (kullanıcı adı veya e-posta) + şifre ile kullanıcı bulunur.
closed_atdolu ise →'closed'(tekrar açılamaz).Askıda değilse →
'not_suspended'.Şifre yanlışsa →
false.Uygunsa:
is_suspended = 0,suspended_at = nullgüncellenir, oturum açılır,truedöner.
Profil: Askıya al / Kapat sayfası
Sayfa ve formlar
GET /profile/account — “Hesap askıya alma ve kapatma” sayfası (ProfileController::accountForm).
İki bölüm:
Hesabı askıya al: Mevcut şifre, “Hesabı askıya al” butonu. Gönderim öncesi JS ile onay sorulur.
Hesabı kalıcı kapat: Mevcut şifre + onay metni alanı (dil dosyasındaki
profile.close_confirm_phrase: TR “KAPAT”, EN “CLOSE”). Gönderim öncesi JS ile onay sorulur.
İşlemler
POST /profile/suspend-account (ProfileController:😖uspendAccount):
CSRF ve mevcut şifre kontrolü.
is_suspended = 1,suspended_at = now()güncellenir.Çıkış yapılır, login sayfasına
auth_successile yönlendirilir (suspend_success mesajı).
POST /profile/close-account (ProfileController::closeAccount):
CSRF, mevcut şifre ve onay metni (tam eşleşme:
profile.close_confirm_phrase) kontrolü.closed_at = now()güncellenir.Çıkış yapılır, login sayfasına
auth_errorile yönlendirilir (close_success mesajı).
Şablonlar
profile/account —
templates/frontend/default/views/profile/account.html.twigAskıya al ve kalıcı kapat kartları, şifre ve onay metni alanları, JS confirm.reactivate-account —
templates/frontend/default/views/reactivate-account.html.twigKullanıcı adı/e-posta + şifre formu.profile/edit — “Hesabı askıya al / Kapat” linki eklendi (
profile/account).login — Askıda hesap için hata kutusunda
auth_show_reactivateflash’ı varsa “Hesabımı tekrar aç” linki (reactivate-account) gösterilir.
Admin panel
Güvenlik → Spam & Zombie → Askıya alınan kullanıcılar listesinde:
closed_atdolu kullanıcılar için “Askıyı kaldır” butonu yerine “Kalıcı kapatıldı” rozeti gösterilir.Unsuspend işlemi yalnızca
closed_atboş kullanıcılar için yapılır; kalıcı kapatılmış hesap askıdan çıkarılamaz.
