重写事件

This commit is contained in:
JaguarJack
2020-04-17 06:47:04 +08:00
parent 1b8f0df628
commit c4d29b5cbf
6 changed files with 47 additions and 42 deletions

View File

@@ -4,7 +4,7 @@ namespace catchAdmin\login;
use catchAdmin\user\model\Users; use catchAdmin\user\model\Users;
use think\facade\Db; use think\facade\Db;
class LoginLogListener class LoginLogEvent
{ {
public function handle($params) public function handle($params)
{ {

View File

@@ -6,23 +6,24 @@ use catchAdmin\permissions\model\Permissions;
use catcher\CatchAdmin; use catcher\CatchAdmin;
use think\facade\Db; use think\facade\Db;
class OperateLogListener class OperateLogEvent
{ {
public function handle($params) public function handle($params)
{ {
$request = $params['request'];
$permission = $params['permission']; $permission = $params['permission'];
$parentPermission = Permissions::where('id', $permission->parent_id)->value('permission_name'); $parentPermission = Permissions::where('id', $permission->parent_id)->value('permission_name');
$requestParams = request()->param();
Db::name('operate_log')->insert([ Db::name('operate_log')->insert([
'creator_id' => $request->user()->id, 'creator_id' => $params['creator_id'],
'module' => $parentPermission ? : '', 'module' => $parentPermission ? : '',
'method' => $request->method(), 'method' => request()->method(),
'operate' => $permission->permission_name, 'operate' => $permission->permission_name,
'route' => $permission->route, 'route' => $permission->route,
'params' => json_encode($request->param()), 'params' => !empty($requestParams) ? json_encode($requestParams) : '',
'created_at' => time(), 'created_at' => time(),
'ip' => $request->ip(), 'ip' => request()->ip(),
]); ]);
} }
} }

View File

@@ -31,6 +31,7 @@ class PermissionsMiddleware
} }
// 模块忽略 // 模块忽略
[$module, $controller, $action] = $this->parseRule($rule); [$module, $controller, $action] = $this->parseRule($rule);
// toad
if (in_array($module, $this->ignoreModule())) { if (in_array($module, $this->ignoreModule())) {
return $next($request); return $next($request);
} }
@@ -39,6 +40,10 @@ class PermissionsMiddleware
if (!$user) { if (!$user) {
throw new PermissionForbiddenException('Login is invalid', Code::LOST_LOGIN); 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')) { if ($request->user()->id === config('catch.permissions.super_admin_id')) {
return $next($request); return $next($request);
@@ -47,21 +52,21 @@ class PermissionsMiddleware
if ($request->isGet() && config('catch.permissions.is_allow_get')) { if ($request->isGet() && config('catch.permissions.is_allow_get')) {
return $next($request); return $next($request);
} }
// toad
$permission = $this->getPermission($module, $controller, $action);
if (!$permission || !in_array($permission->id, Cache::get(CatchCacheKeys::USER_PERMISSIONS . $user->id))) { if (!$permission || !in_array($permission->id, Cache::get(CatchCacheKeys::USER_PERMISSIONS . $user->id))) {
throw new PermissionForbiddenException(); throw new PermissionForbiddenException();
} }
// 操作日志
event('operateLog', [
'request' => $request,
'permission' => $permission,
]);
return $next($request); return $next($request);
} }
/**
* 解析规则
*
* @time 2020年04月16日
* @param $rule
* @return array
*/
protected function parseRule($rule) protected function parseRule($rule)
{ {
[$controller, $action] = explode(Str::contains($rule, '@') ? '@' : '/', $rule); [$controller, $action] = explode(Str::contains($rule, '@') ? '@' : '/', $rule);
@@ -99,8 +104,31 @@ class PermissionsMiddleware
return $permission; return $permission;
} }
/**
* 忽略模块
*
* @time 2020年04月16日
* @return array
*/
protected function ignoreModule() protected function ignoreModule()
{ {
return ['login']; 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,
]);
}
} }

View File

@@ -1,12 +0,0 @@
<?php
namespace catchAdmin\system\event;
class LoginLogEvent
{
protected $params;
public function __construct(array $params)
{
$this->params = $params;
}
}

View File

@@ -1,12 +0,0 @@
<?php
namespace catchAdmin\system\event;
class OperateLogEvent
{
protected $params;
public function __construct(array $params)
{
$this->params = $params;
}
}

View File

@@ -1,7 +1,7 @@
<?php <?php
use catchAdmin\login\LoginLogListener; use catchAdmin\login\LoginLogListener;
use catchAdmin\permissions\OperateLogListener; use catchAdmin\permissions\OperateLogEvent;
use catcher\event\LoadModuleRoutes; use catcher\event\LoadModuleRoutes;
return [ return [
@@ -83,11 +83,11 @@ return [
'events' => [ 'events' => [
// 登录日志 // 登录日志
'loginLog' => [ 'loginLog' => [
LoginLogListener::class, \catchAdmin\login\LoginLogEvent::class,
], ],
// 操作日志 // 操作日志
'operateLog' => [ 'operateLog' => [
OperateLogListener::class, OperateLogEvent::class,
], ],
// 路由加载 // 路由加载
'RouteLoaded' => [ 'RouteLoaded' => [