幸福

如人饮水,冷暖自知

Laravel中间件的妙用 - 记录管理员操作日志

因功能需求,需要記錄系統各管理員操作日誌,思忖再三,未得良方,后經David提醒,方才發覺中間件的魅力,因此前系統亦採用此方法來實現權限控制,這樣看來確實具有異曲同工之妙,具體實施步驟如下:
1. 建立一個中間件:
php artisan make:middleware LogsMiddleware

2. 註冊全局中間件:

在 app/Http/Kernel.php 的 $middleware 属性清单列表中添加如下:
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\OperateLogMiddleware::class,
    ];
於是乎所有Http請求均會經由此中間件
3. 假設請求都是基於 RESTful API 實現的,則需要根據當前請求方式獲取操作描述,則可定義一個獨立的配置文件,將所需記錄之操作按照路由方式一 一錄入即可,如(假設配置文件名稱為test.php):
return [
    // 添加範例
    ‘test/getArticleList.json.get’ => ‘查看文章列表’,
    ‘test/editArticle.json.put’ => ‘編輯文章’,
];
4. 在LogsMiddleware.php中實現最終的記錄操作,如下:
namespace App\Http\Middleware;
use Closure;
use App\Models\Logs;
use Illuminate\Support\Facades\Config;
use Carbon\Carbon;
class LogsMiddleware {
    public function handle($request, Closure $next) {
        $method = strtolower($request->method());
        $routes = $request->path();
        $ip = $request->ip();
        $record = $this->getOperateLog($routes, $method);
        if ($record) {
            $data = array(
                ‘operator’ => ‘test’,
                ‘method’ => $method,
                ‘routes’ => $routes,
                ‘record’ => $record,
                ‘ip’ => $ip,
                ‘created_at’ => Carbon::now()
            );
            Logs::create($data);
        }
        return $next($request);
    }
    private function getOperateLog($routes, $method) {
        $operateLogConf = config(‘test’);
        $key = $routes.’.’.$method;
        $record = isset($operateLogConf[$key]) && $operateLogConf[$key] ? $operateLogConf[$key] : ”;
        if ($record) {
            return $record;
        } else {
            return false;
        }
    }
}


去打赏

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注