XOOPS user Sistemi
XOOPS user Sistemi user hesaplarını, kimlik doğrulamayı, yetkilendirmeyi, grup üyeliğini ve oturum yönetimini yönetir. Uygulamanızı güvence altına almak ve user erişimini kontrol etmek için sağlam bir çerçeve sağlar.
user Sistem Mimarisi
Section titled “user Sistem Mimarisi”graph TD A[User System] -->|manages| B[XoopsUser] A -->|manages| C[XoopsGroup] A -->|handles| D[Authentication] A -->|handles| E[Sessions]
D -->|validates| F[Username/Password] D -->|validates| G[Email/Token] D -->|triggers| H[Post-Login Hooks]
E -->|manages| I[Session Data] E -->|manages| J[Session Cookies]
B -->|belongs to| C B -->|has| K[Permissions] B -->|has| L[Profile Data]
C -->|defines| M[Access Levels] C -->|contains| N[Multiple Users]XoopsUser Sınıfı
Section titled “XoopsUser Sınıfı”Bir user hesabını temsil eden ana user nesnesi sınıfı.
Sınıfa Genel Bakış
Section titled “Sınıfa Genel Bakış”namespace Xoops\Core\User;
class XoopsUser extends XoopsObject{ protected int $uid = 0; protected string $uname = ''; protected string $email = ''; protected string $pass = ''; protected int $uregdate = 0; protected int $ulevel = 0; protected array $groups = []; protected array $permissions = [];}Yapıcı
Section titled “Yapıcı”public function __construct(int $uid = null)İsteğe bağlı olarak veritabanından kimliğe göre yüklenen yeni bir user nesnesi oluşturur.
Parametreler:
| Parametre | Tür | Açıklama |
|---|---|---|
$uid | int | Yüklenecek user Kimliği (isteğe bağlı) |
Örnek:
// Create new user$user = new XoopsUser();
// Load existing user$user = new XoopsUser(123);Temel Özellikler
Section titled “Temel Özellikler”| Emlak | Tür | Açıklama |
|---|---|---|
uid | int | user Kimliği |
uname | dize | user adı |
email | dize | E-posta adresi |
pass | dize | Şifre karması |
uregdate | int | Kayıt zaman damgası |
ulevel | int | user düzeyi (9=yönetici, 1=user) |
groups | dizi | Grup Kimlikleri |
permissions | dizi | İzin bayrakları |
Temel Yöntemler
Section titled “Temel Yöntemler”getID / getUid
Section titled “getID / getUid”Kullanıcının kimliğini alır.
public function getID(): intpublic function getUid(): int // AliasGetirir: int - user Kimliği
Örnek:
$user = new XoopsUser(1);echo $user->getID(); // 1echo $user->getUid(); // 1getUnameReal
Section titled “getUnameReal”Kullanıcının görünen adını alır.
public function getUnameReal(): stringReturns: string - Kullanıcının gerçek adı
Örnek:
$realName = $user->getUnameReal();echo "Hello, $realName";e-posta al
Section titled “e-posta al”Kullanıcının e-posta adresini alır.
public function getEmail(): stringGetirir: string - E-posta adresi
Örnek:
$email = $user->getEmail();mail($email, 'Welcome', 'Welcome to XOOPS');getVar / setVar
Section titled “getVar / setVar”Bir user değişkenini alır veya ayarlar.
public function getVar(string $key, string $format = 's'): mixedpublic function setVar(string $key, mixed $value, bool $notGpc = false): boolÖrnek:
// Get values$username = $user->getVar('uname');$email = $user->getVar('email', 's'); // Formatted for display
// Set values$user->setVar('uname', 'newusername');$user->setVar('email', 'user@example.com');getGroups
Section titled “getGroups”Kullanıcının grup üyeliklerini alır.
public function getGroups(): arrayReturns: array - Grup kimlikleri dizisi
Örnek:
$groups = $user->getGroups();echo "Member of " . count($groups) . " groups";####Grup İçinde
Kullanıcının bir gruba ait olup olmadığını kontrol eder.
public function isInGroup(int $groupId): boolParametreler:
| Parametre | Tür | Açıklama |
|---|---|---|
$groupId | int | Kontrol edilecek grup kimliği |
Döndürür: bool - Gruptaysa doğru
Örnek:
if ($user->isInGroup(1)) { // 1 = Webmasters echo 'User is a webmaster';}Yönetici
Section titled “Yönetici”Kullanıcının yönetici olup olmadığını kontrol eder.
public function isAdmin(): boolDöndürür: bool - Yönetici ise doğru
Örnek:
if ($user->isAdmin()) { // Show admin controls echo '<a href="admin/">Admin Panel</a>';}Profili Al
Section titled “Profili Al”user profili bilgilerini alır.
public function getProfile(): arrayGetirir: array - Profil verileri
Örnek:
$profile = $user->getProfile();echo 'Bio: ' . $profile['bio'];user hesabının aktif olup olmadığını kontrol eder.
public function isActive(): boolDöndürür: bool - Etkinse doğru
Örnek:
if ($user->isActive()) { // Allow user access} else { // Restrict access}güncellemeSonGiriş
Section titled “güncellemeSonGiriş”Kullanıcının son oturum açma zaman damgasını günceller.
public function updateLastLogin(): boolDöndürür: bool - Başarı durumunda doğru
Örnek:
if ($user->updateLastLogin()) { echo 'Login recorded';}XoopsGroup Sınıfı
Section titled “XoopsGroup Sınıfı”user gruplarını ve izinlerini yönetir.
Sınıfa Genel Bakış
Section titled “Sınıfa Genel Bakış”namespace Xoops\Core\User;
class XoopsGroup extends XoopsObject{ protected int $groupid = 0; protected string $name = ''; protected string $description = ''; protected int $group_type = 0; protected array $users = [];}Sabitler
Section titled “Sabitler”| Sabit | Değer | Açıklama |
|---|---|---|
TYPE_NORMAL | 0 | Normal user grubu |
TYPE_ADMIN | 1 | Yönetim grubu |
TYPE_SYSTEM | 2 | Sistem grubu |
Yöntemler
Section titled “Yöntemler”getName
Section titled “getName”Grup adını alır.
public function getName(): stringGetirir: string - Grup adı
Örnek:
$group = new XoopsGroup(1);echo $group->getName(); // "Webmasters"getDescription
Section titled “getDescription”Grup açıklamasını alır.
public function getDescription(): stringGeri döndürür: string - Açıklama
Örnek:
echo $group->getDescription();getUsers
Section titled “getUsers”Grup üyelerini alır.
public function getUsers(): arrayReturns: array - user kimlikleri dizisi
Örnek:
$users = $group->getUsers();echo "Group has " . count($users) . " members";user ekle
Section titled “user ekle”Gruba bir user ekler.
public function addUser(int $uid): boolParametreler:
| Parametre | Tür | Açıklama |
|---|---|---|
$uid | int | user Kimliği |
Döndürür: bool - Başarı durumunda doğru
Örnek:
$group = new XoopsGroup(2); // Editors$group->addUser(123);$groupHandler->insert($group);Kullanıcıyı kaldır
Section titled “Kullanıcıyı kaldır”Bir kullanıcıyı gruptan çıkarır.
public function removeUser(int $uid): boolÖrnek:
$group->removeUser(123);user Kimlik Doğrulaması
Section titled “user Kimlik Doğrulaması”Giriş İşlemi
Section titled “Giriş İşlemi”/** * User login */function xoops_user_login(string $uname, string $pass, bool $rememberMe = false): ?XoopsUser{ global $xoopsDB;
// Sanitize username $uname = trim($uname);
// Get user from database $query = $xoopsDB->prepare( 'SELECT * FROM ' . $xoopsDB->prefix('users') . ' WHERE uname = ? AND active = 1' ); $query->bind_param('s', $uname); $query->execute(); $result = $query->get_result();
if ($result->num_rows === 0) { return null; // User not found }
$row = $result->fetch_assoc();
// Verify password if (!password_verify($pass, $row['pass'])) { return null; // Invalid password }
// Load user object $user = new XoopsUser($row['uid']);
// Update last login $user->updateLastLogin();
// Handle "Remember Me" if ($rememberMe) { // Set persistent cookie setcookie( 'xoops_user_remember', $user->uid(), time() + (30 * 24 * 60 * 60), // 30 days '/', $_SERVER['HTTP_HOST'] ?? '' ); }
return $user;}Şifre Yönetimi
Section titled “Şifre Yönetimi”/** * Hash password securely */function xoops_hash_password(string $password): string{ return password_hash($password, PASSWORD_BCRYPT, [ 'cost' => 12 ]);}
/** * Verify password */function xoops_verify_password(string $password, string $hash): bool{ return password_verify($password, $hash);}
/** * Check if password needs rehashing */function xoops_password_needs_rehash(string $hash): bool{ return password_needs_rehash($hash, PASSWORD_BCRYPT, [ 'cost' => 12 ]);}Oturum Yönetimi
Section titled “Oturum Yönetimi”Oturum Sınıfı
Section titled “Oturum Sınıfı”namespace Xoops\Core;
class SessionManager{ protected array $data = []; protected string $sessionId = '';
public function start(): void {} public function get(string $key): mixed {} public function set(string $key, mixed $value): void {} public function destroy(): void {}}Oturum Yöntemleri
Section titled “Oturum Yöntemleri”Oturumu Başlat
Section titled “Oturumu Başlat”<?phpsession_start();
// Regenerate session ID for securitysession_regenerate_id(true);
// Set session timeoutini_set('session.gc_maxlifetime', 3600); // 1 hour
// Store user in sessionif ($user) { $_SESSION['xoops_user'] = $user; $_SESSION['xoops_uid'] = $user->getID(); $_SESSION['xoops_uname'] = $user->getVar('uname');}Oturumu Kontrol Et
Section titled “Oturumu Kontrol Et”/** * Get current user from session */function xoops_get_current_user(): ?XoopsUser{ if (isset($_SESSION['xoops_user']) && $_SESSION['xoops_user'] instanceof XoopsUser) { return $_SESSION['xoops_user']; } return null;}
/** * Check if user is logged in */function xoops_is_user_logged_in(): bool{ return isset($_SESSION['xoops_uid']) && $_SESSION['xoops_uid'] > 0;}Oturumu Yok Et
Section titled “Oturumu Yok Et”/** * User logout */function xoops_user_logout(){ global $xoopsUser;
// Log the logout if ($xoopsUser) { error_log('User ' . $xoopsUser->getVar('uname') . ' logged out'); }
// Destroy session data $_SESSION = [];
// Delete session cookie if (ini_get('session.use_cookies')) { $params = session_get_cookie_params(); setcookie( session_name(), '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params['httponly'] ); }
// Destroy session session_destroy();}İzin Sistemi
Section titled “İzin Sistemi”İzin Sabitleri
Section titled “İzin Sabitleri”| Sabit | Değer | Açıklama |
|---|---|---|
XOOPS_PERMISSION_NONE | 0 | İzin yok |
XOOPS_PERMISSION_VIEW | 1 | İçeriği görüntüle |
XOOPS_PERMISSION_SUBMIT | 2 | İçerik gönder |
XOOPS_PERMISSION_EDIT | 4 | İçeriği düzenle |
XOOPS_PERMISSION_DELETE | 8 | İçeriği sil |
XOOPS_PERMISSION_ADMIN | 16 | Yönetici erişimi |
İzin Kontrolü
Section titled “İzin Kontrolü”/** * Check if user has permission */function xoops_check_permission($user, $resource, $permission){ if (!$user) { return false; }
// Admins have all permissions if ($user->isAdmin()) { return true; }
// Check group permissions $groups = $user->getGroups(); foreach ($groups as $groupId) { if (xoops_group_has_permission($groupId, $resource, $permission)) { return true; } }
return false;}user İşleyicisi
Section titled “user İşleyicisi”UserHandler, user kalıcılığı işlemlerini yönetir.
/** * Get user handler */$userHandler = xoops_getHandler('user');
/** * Create new user */$user = new XoopsUser();$user->setVar('uname', 'newuser');$user->setVar('email', 'user@example.com');$user->setVar('pass', xoops_hash_password('password123'));$user->setVar('uregdate', time());$user->setVar('uactive', 1);
if ($userHandler->insert($user)) { echo 'User created with ID: ' . $user->getID();}
/** * Update user */$user = $userHandler->get(123);$user->setVar('email', 'newemail@example.com');$userHandler->insert($user);
/** * Get user by name */$user = $userHandler->findByUsername('john');
/** * Delete user */$userHandler->delete($user);
/** * Search users */$criteria = new CriteriaCompo();$criteria->add(new Criteria('uname', '%admin%', 'LIKE'));$users = $userHandler->getObjects($criteria);Tam user Yönetimi Örneği
Section titled “Tam user Yönetimi Örneği”<?php/** * Complete user authentication and profile example */
require_once XOOPS_ROOT_PATH . '/include/common.inc.php';
$xoopsUser = $GLOBALS['xoopsUser'];
// Check if user is logged inif (!$xoopsUser || !$xoopsUser->isActive()) { redirect_header(XOOPS_URL, 3, 'Please login');}
// Get user handler$userHandler = xoops_getHandler('user');
// Get current user with fresh data$currentUser = $userHandler->get($xoopsUser->getID());
// User profile pageecho '<h1>Profile: ' . htmlspecialchars($currentUser->getVar('uname')) . '</h1>';
echo '<div class="user-profile">';echo '<p><strong>Username:</strong> ' . htmlspecialchars($currentUser->getVar('uname')) . '</p>';echo '<p><strong>Email:</strong> ' . htmlspecialchars($currentUser->getVar('email')) . '</p>';echo '<p><strong>Registered:</strong> ' . date('Y-m-d H:i:s', $currentUser->getVar('uregdate')) . '</p>';echo '<p><strong>Groups:</strong> ';
$groupHandler = xoops_getHandler('group');$groups = $currentUser->getGroups();$groupNames = [];foreach ($groups as $groupId) { $group = $groupHandler->get($groupId); if ($group) { $groupNames[] = htmlspecialchars($group->getName()); }}echo implode(', ', $groupNames);echo '</p>';
// Admin statusif ($currentUser->isAdmin()) { echo '<p><strong>Status:</strong> Administrator</p>';}
echo '</div>';
// Change password formif ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['change_password'])) { $oldPassword = $_POST['old_password'] ?? ''; $newPassword = $_POST['new_password'] ?? ''; $confirmPassword = $_POST['confirm_password'] ?? '';
// Verify old password if (!password_verify($oldPassword, $currentUser->getVar('pass'))) { echo '<div class="error">Current password is incorrect</div>'; } elseif ($newPassword !== $confirmPassword) { echo '<div class="error">New passwords do not match</div>'; } elseif (strlen($newPassword) < 6) { echo '<div class="error">Password must be at least 6 characters</div>'; } else { // Update password $currentUser->setVar('pass', xoops_hash_password($newPassword)); if ($userHandler->insert($currentUser)) { echo '<div class="success">Password changed successfully</div>'; } else { echo '<div class="error">Failed to update password</div>'; } }}
// Password change formecho '<form method="post">';echo '<h3>Change Password</h3>';echo '<div class="form-group">';echo '<label>Current Password:</label>';echo '<input type="password" name="old_password" required>';echo '</div>';echo '<div class="form-group">';echo '<label>New Password:</label>';echo '<input type="password" name="new_password" required>';echo '</div>';echo '<div class="form-group">';echo '<label>Confirm Password:</label>';echo '<input type="password" name="confirm_password" required>';echo '</div>';echo '<button type="submit" name="change_password">Change Password</button>';echo '</form>';En İyi Uygulamalar
Section titled “En İyi Uygulamalar”- Parolaları Karma - Parola karma işlemi için her zaman bcrypt veya argon2 kullanın
- Girdiyi Doğrula - Tüm user girişlerini doğrulayın ve temizleyin
- İzinleri Kontrol Edin - İşlemlerden önce daima user izinlerini doğrulayın
- Oturumları Güvenli Bir Şekilde Kullanın - Oturum açma sırasında oturum kimliklerini yeniden oluşturun
- Etkinlikleri Günlüğe Kaydetme - Oturum açma, oturum kapatma ve kritik eylemleri günlüğe kaydetme
- Hız Sınırlama - Giriş denemesi hız sınırlamasını uygulayın
- HTTPS Yalnızca - Kimlik doğrulama için her zaman HTTPS kullanın
- Grup Yönetimi - İzin organizasyonu için grupları kullanın
İlgili Belgeler
Section titled “İlgili Belgeler”- ../Kernel/Kernel-Classes - Core hizmetleri ve önyükleme
- ../Database/QueryBuilder - user verileri için database sorguları
- ../Core/XoopsObject - Temel nesne sınıfı
Ayrıca bakınız: XOOPS user API | PHP Güvenlik