init
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
/**
|
||||
* Here is your custom functions.
|
||||
*/
|
||||
|
||||
use app\utils\Logger;
|
||||
use plugin\admin\app\common\RunCatching;
|
||||
use plugin\admin\app\model\Admin;
|
||||
use plugin\admin\app\model\AdminRole;
|
||||
use support\Response;
|
||||
|
||||
/**
|
||||
* 当前管理员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);
|
||||
}
|
||||
|
||||
function admin_error_401_script(): Response
|
||||
{
|
||||
return response(<<<EOF
|
||||
<script>top.location.href = '/app/admin';</script>
|
||||
EOF
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 执行闭包,捕获异常并返回 Result 对象(Kotlin 风格)
|
||||
* @param callable $func
|
||||
* @param string|null $errorMsg
|
||||
* @return RunCatching
|
||||
*/
|
||||
function runCatching(callable $func, ?string $errorMsg = null): RunCatching
|
||||
{
|
||||
try {
|
||||
return RunCatching::success($func());
|
||||
} catch (\Throwable $e) {
|
||||
if ($errorMsg != null) Logger::error($errorMsg, $e);
|
||||
return RunCatching::failure($e);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user