140 lines
3.0 KiB
PHP
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);
|
|
}
|