初始化-安装依赖
This commit is contained in:
162
server/plugin/saiadmin/app/event/SystemUser.php
Normal file
162
server/plugin/saiadmin/app/event/SystemUser.php
Normal file
@@ -0,0 +1,162 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | saiadmin [ saiadmin快速开发框架 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: sai <1430792918@qq.com>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace plugin\saiadmin\app\event;
|
||||
|
||||
use plugin\saiadmin\app\cache\ReflectionCache;
|
||||
use plugin\saiadmin\app\model\system\SystemLoginLog;
|
||||
use plugin\saiadmin\app\model\system\SystemOperLog;
|
||||
|
||||
class SystemUser
|
||||
{
|
||||
/**
|
||||
* 登录日志
|
||||
* @param $item
|
||||
*/
|
||||
public function login($item)
|
||||
{
|
||||
$request = request();
|
||||
$ip = $request ? $request->getRealIp() : '127.0.0.1';
|
||||
$http_user_agent = $request ? $request->header('user-agent') : '';
|
||||
$data['username'] = $item['username'];
|
||||
$data['ip'] = $ip;
|
||||
$data['ip_location'] = self::getIpLocation($ip);
|
||||
$data['os'] = self::getOs($http_user_agent);
|
||||
$data['browser'] = self::getBrowser($http_user_agent);
|
||||
$data['status'] = $item['status'];
|
||||
$data['message'] = $item['message'];
|
||||
$data['login_time'] = date('Y-m-d H:i:s');
|
||||
if (isset($item['admin_id'])) {
|
||||
$data['created_by'] = $item['admin_id'];
|
||||
$data['updated_by'] = $item['admin_id'];
|
||||
}
|
||||
SystemLoginLog::create($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录操作日志
|
||||
*/
|
||||
public function operateLog(): bool
|
||||
{
|
||||
$request = request();
|
||||
if (!$request) {
|
||||
return false;
|
||||
}
|
||||
if ($request->method() === 'GET') {
|
||||
return false;
|
||||
}
|
||||
$info = getCurrentInfo();
|
||||
$ip = $request->getRealIp();
|
||||
$module = $request->plugin;
|
||||
$rule = trim($request->uri());
|
||||
$data['username'] = $info['username'];
|
||||
$data['method'] = $request->method();
|
||||
$data['router'] = $rule;
|
||||
$data['service_name'] = self::getServiceName();
|
||||
$data['app'] = $module;
|
||||
$data['ip'] = $ip;
|
||||
$data['ip_location'] = self::getIpLocation($ip);
|
||||
$data['request_data'] = $this->filterParams($request->all());
|
||||
SystemOperLog::create($data);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取业务名称
|
||||
*/
|
||||
protected function getServiceName(): string
|
||||
{
|
||||
$request = request();
|
||||
if (!$request) {
|
||||
return '未命名业务';
|
||||
}
|
||||
$permissions = ReflectionCache::getPermissionAttributes($request->controller, $request->action);
|
||||
if (!empty($permissions)) {
|
||||
return $permissions['title'] ?? '未命名业务';
|
||||
} else {
|
||||
return '未命名业务';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 过滤字段
|
||||
*/
|
||||
protected function filterParams($params): string
|
||||
{
|
||||
$blackList = ['password', 'oldPassword', 'newPassword'];
|
||||
foreach ($params as $key => $value) {
|
||||
if (in_array($key, $blackList)) {
|
||||
$params[$key] = '******';
|
||||
}
|
||||
}
|
||||
return json_encode($params, JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取IP地理位置
|
||||
*/
|
||||
protected function getIpLocation($ip): string
|
||||
{
|
||||
$ip2region = new \Ip2Region();
|
||||
try {
|
||||
$region = $ip2region->memorySearch($ip);
|
||||
} catch (\Exception $e) {
|
||||
return '未知';
|
||||
}
|
||||
list($country, $province, $city, $network) = explode('|', $region['region']);
|
||||
if ($network === '内网IP') {
|
||||
return $network;
|
||||
}
|
||||
if ($country == '中国') {
|
||||
return $province . '-' . $city . ':' . $network;
|
||||
} else if ($country == '0') {
|
||||
return '未知';
|
||||
} else {
|
||||
return $country;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取浏览器信息
|
||||
*/
|
||||
protected function getBrowser($user_agent): string
|
||||
{
|
||||
$br = 'Unknown';
|
||||
if (preg_match('/MSIE/i', $user_agent)) {
|
||||
$br = 'MSIE';
|
||||
} elseif (preg_match('/Firefox/i', $user_agent)) {
|
||||
$br = 'Firefox';
|
||||
} elseif (preg_match('/Chrome/i', $user_agent)) {
|
||||
$br = 'Chrome';
|
||||
} elseif (preg_match('/Safari/i', $user_agent)) {
|
||||
$br = 'Safari';
|
||||
} elseif (preg_match('/Opera/i', $user_agent)) {
|
||||
$br = 'Opera';
|
||||
} else {
|
||||
$br = 'Other';
|
||||
}
|
||||
return $br;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取操作系统信息
|
||||
*/
|
||||
protected function getOs($user_agent): string
|
||||
{
|
||||
$os = 'Unknown';
|
||||
if (preg_match('/win/i', $user_agent)) {
|
||||
$os = 'Win';
|
||||
} elseif (preg_match('/mac/i', $user_agent)) {
|
||||
$os = 'Mac';
|
||||
} elseif (preg_match('/linux/i', $user_agent)) {
|
||||
$os = 'Linux';
|
||||
} else {
|
||||
$os = 'Other';
|
||||
}
|
||||
return $os;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user