<?php /** * Here is your custom functions. */ use plugin\admin\app\model\Admin; use plugin\admin\app\model\AdminRole; /** * 当前管理员id * @return integer|null */ function admin_id(): ?int { return session('admin.id'); } /** * 当前管理员 * @param null|array|string $fields * @return array|mixed|null * @throws Exception */ function admin($fields = null) { refresh_admin_session(); if (!$admin = session('admin')) { return null; } if ($fields === null) { return $admin; } if (is_array($fields)) { $results = []; foreach ($fields as $field) { $results[$field] = $admin[$field] ?? null; } return $results; } return $admin[$fields] ?? null; } /** * 刷新当前管理员session * @param bool $force * @return void * @throws Exception */ function refresh_admin_session(bool $force = false) { $admin_session = session('admin'); if (!$admin_session) { return null; } $admin_id = $admin_session['id']; $time_now = time(); // session在2秒内不刷新 $session_ttl = 2; $session_last_update_time = session('admin.session_last_update_time', 0); if (!$force && $time_now - $session_last_update_time < $session_ttl) { return null; } $session = request()->session(); $admin = Admin::find($admin_id); if (!$admin) { $session->forget('admin'); return null; } $admin = $admin->toArray(); $admin['password'] = md5($admin['password']); $admin_session['password'] = $admin_session['password'] ?? ''; if ($admin['password'] != $admin_session['password']) { $session->forget('admin'); return null; } // 账户被禁用 if ($admin['status'] != 0) { $session->forget('admin'); return; } $admin['roles'] = AdminRole::where('admin_id', $admin_id)->pluck('role_id')->toArray(); $admin['session_last_update_time'] = $time_now; $session->set('admin', $admin); }