diff --git a/catch/login/LoginLogListener.php b/catch/login/LoginLogEvent.php similarity index 98% rename from catch/login/LoginLogListener.php rename to catch/login/LoginLogEvent.php index dbcad95..7d56228 100644 --- a/catch/login/LoginLogListener.php +++ b/catch/login/LoginLogEvent.php @@ -4,7 +4,7 @@ namespace catchAdmin\login; use catchAdmin\user\model\Users; use think\facade\Db; -class LoginLogListener +class LoginLogEvent { public function handle($params) { diff --git a/catch/permissions/OperateLogListener.php b/catch/permissions/OperateLogEvent.php similarity index 66% rename from catch/permissions/OperateLogListener.php rename to catch/permissions/OperateLogEvent.php index 5cd5954..f606bb3 100644 --- a/catch/permissions/OperateLogListener.php +++ b/catch/permissions/OperateLogEvent.php @@ -6,23 +6,24 @@ use catchAdmin\permissions\model\Permissions; use catcher\CatchAdmin; use think\facade\Db; -class OperateLogListener +class OperateLogEvent { public function handle($params) { - $request = $params['request']; $permission = $params['permission']; $parentPermission = Permissions::where('id', $permission->parent_id)->value('permission_name'); + + $requestParams = request()->param(); Db::name('operate_log')->insert([ - 'creator_id' => $request->user()->id, + 'creator_id' => $params['creator_id'], 'module' => $parentPermission ? : '', - 'method' => $request->method(), + 'method' => request()->method(), 'operate' => $permission->permission_name, 'route' => $permission->route, - 'params' => json_encode($request->param()), + 'params' => !empty($requestParams) ? json_encode($requestParams) : '', 'created_at' => time(), - 'ip' => $request->ip(), + 'ip' => request()->ip(), ]); } } diff --git a/catch/permissions/PermissionsMiddleware.php b/catch/permissions/PermissionsMiddleware.php index 8a15cf9..12e0000 100644 --- a/catch/permissions/PermissionsMiddleware.php +++ b/catch/permissions/PermissionsMiddleware.php @@ -31,6 +31,7 @@ class PermissionsMiddleware } // 模块忽略 [$module, $controller, $action] = $this->parseRule($rule); + // toad if (in_array($module, $this->ignoreModule())) { return $next($request); } @@ -39,6 +40,10 @@ class PermissionsMiddleware if (!$user) { throw new PermissionForbiddenException('Login is invalid', Code::LOST_LOGIN); } + //dd($this->parseRule($rule)); + $permission = $this->getPermission($module, $controller, $action); + // 记录操作 + $this->operateEvent($request->user()->id, $permission); // 超级管理员 if ($request->user()->id === config('catch.permissions.super_admin_id')) { return $next($request); @@ -47,21 +52,21 @@ class PermissionsMiddleware if ($request->isGet() && config('catch.permissions.is_allow_get')) { return $next($request); } - // toad - $permission = $this->getPermission($module, $controller, $action); + if (!$permission || !in_array($permission->id, Cache::get(CatchCacheKeys::USER_PERMISSIONS . $user->id))) { throw new PermissionForbiddenException(); } - // 操作日志 - event('operateLog', [ - 'request' => $request, - 'permission' => $permission, - ]); - return $next($request); } + /** + * 解析规则 + * + * @time 2020年04月16日 + * @param $rule + * @return array + */ protected function parseRule($rule) { [$controller, $action] = explode(Str::contains($rule, '@') ? '@' : '/', $rule); @@ -99,8 +104,31 @@ class PermissionsMiddleware return $permission; } + /** + * 忽略模块 + * + * @time 2020年04月16日 + * @return array + */ protected function ignoreModule() { return ['login']; } + + /** + * 操作日志 + * + * @time 2020年04月16日 + * @param $creatorId + * @param $permission + * @return void + */ + protected function operateEvent($creatorId, $permission) + { + // 操作日志 + $permission && event('operateLog', [ + 'creator_id' => $creatorId, + 'permission' => $permission, + ]); + } } diff --git a/catch/system/event/LoginLogEvent.php b/catch/system/event/LoginLogEvent.php deleted file mode 100644 index 9d33a1c..0000000 --- a/catch/system/event/LoginLogEvent.php +++ /dev/null @@ -1,12 +0,0 @@ -params = $params; - } -} \ No newline at end of file diff --git a/catch/system/event/OperateLogEvent.php b/catch/system/event/OperateLogEvent.php deleted file mode 100644 index cece388..0000000 --- a/catch/system/event/OperateLogEvent.php +++ /dev/null @@ -1,12 +0,0 @@ -params = $params; - } -} \ No newline at end of file diff --git a/config/catch.php b/config/catch.php index 778ef73..e8c4c82 100644 --- a/config/catch.php +++ b/config/catch.php @@ -1,7 +1,7 @@ [ // 登录日志 'loginLog' => [ - LoginLogListener::class, + \catchAdmin\login\LoginLogEvent::class, ], // 操作日志 'operateLog' => [ - OperateLogListener::class, + OperateLogEvent::class, ], // 路由加载 'RouteLoaded' => [