goview_php/plugin/admin/app/functions.php
2023-06-06 10:47:49 +08:00

140 lines
3.0 KiB
PHP

<?php
/**
* Here is your custom functions.
*/
use plugin\admin\app\model\User;
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
*/
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;
}
/**
* 当前登录用户id
* @return integer|null
*/
function user_id(): ?int
{
return session('user.id');
}
/**
* 当前登录用户
* @param null|array|string $fields
* @return array|mixed|null
*/
function user($fields = null)
{
refresh_user_session();
if (!$user = session('user')) {
return null;
}
if ($fields === null) {
return $user;
}
if (is_array($fields)) {
$results = [];
foreach ($fields as $field) {
$results[$field] = $user[$field] ?? null;
}
return $results;
}
return $user[$fields] ?? null;
}
/**
* 刷新当前管理员session
* @param bool $force
* @return void
*/
function refresh_admin_session(bool $force = false)
{
if (!$admin_id = admin_id()) {
return null;
}
$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();
unset($admin['password']);
// 账户被禁用
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);
}
/**
* 刷新当前用户session
* @param bool $force
* @return void
*/
function refresh_user_session(bool $force = false)
{
if (!$user_id = user_id()) {
return null;
}
$time_now = time();
// session在2秒内不刷新
$session_ttl = 2;
$session_last_update_time = session('user.session_last_update_time', 0);
if (!$force && $time_now - $session_last_update_time < $session_ttl) {
return null;
}
$session = request()->session();
$user = User::find($user_id);
if (!$user) {
$session->forget('user');
return null;
}
$user = $user->toArray();
unset($user['password']);
$user['session_last_update_time'] = $time_now;
$session->set('user', $user);
}