134 lines
4.1 KiB
PHP
Raw Normal View History

<?php
/**
* 登录、退出、记录日志相关
* @author yupoxiong<i@yufuping.com>
*/
namespace app\admin\traits;
use app\admin\model\AdminLog;
use app\admin\model\AdminUser;
use tools\Crypt;
use tools\SafeCookie;
use think\facade\Session;
trait AdminAuth
{
public static $admin_user_id = 'admin_user_id';
public static $admin_user_id_sign = 'admin_user_sign';
//是否登录
protected function isLogin()
{
//这里要写个判断数据库的才行
$admin_user_id = Session::get(self::$admin_user_id);
$user = false;
$this->user = &$user;
if (empty($admin_user_id)) {
if (SafeCookie::has(self::$admin_user_id) && SafeCookie::has(self::$admin_user_id_sign)) {
$admin_user_id = SafeCookie::get(self::$admin_user_id);
$sign = SafeCookie::get(self::$admin_user_id_sign);
$user = AdminUser::get($admin_user_id);
if ($user && $user->sign_str === $sign) {
Session::set(self::$admin_user_id, $admin_user_id);
Session::set(self::$admin_user_id_sign, $sign);
return true;
}
}
return false;
}
$user = AdminUser::get($admin_user_id);
if(!$user) {
return false;
}
$this->uid = $user->id;
return Session::get(self::$admin_user_id_sign) === $user->sign_str;
}
/**
* session 与cookie登录
* @param $user AdminUser
* @param bool $remember
* @return bool
*/
public static function authLogin($user, $remember = false)
{
Session::set(self::$admin_user_id, $user->id);
Session::set(self::$admin_user_id_sign, $user->sign_str);
//记住登录
if ($remember === true) {
SafeCookie::set(self::$admin_user_id, $user->id);
SafeCookie::set(self::$admin_user_id_sign, $user->sign_str);
} else if (SafeCookie::has(self::$admin_user_id) || SafeCookie::has(self::$admin_user_id_sign)) {
SafeCookie::delete(self::$admin_user_id);
SafeCookie::delete(self::$admin_user_id_sign);
}
//记录登录日志
self::loginLog($user);
return true;
}
//退出
public static function authLogout()
{
Session::delete(self::$admin_user_id);
Session::delete(self::$admin_user_id_sign);
if (SafeCookie::has(self::$admin_user_id) || SafeCookie::has(self::$admin_user_id_sign)) {
SafeCookie::delete(self::$admin_user_id);
SafeCookie::delete(self::$admin_user_id_sign);
}
return true;
}
/**
* 权限检查
* @param $user AdminUser
* @return bool
*/
public function authCheck($user)
{
return in_array($this->url, $this->authExcept, true) || in_array($this->url, $user->auth_url, true);
}
//登录记录
public static function loginLog($user)
{
$data = AdminLog::create([
'admin_user_id' => $user->id,
'name' => '登录',
'url' => 'admin/auth/login',
'log_method' => 'POST',
'log_ip' => request()->ip()
]);
$crypt_data = Crypt::encrypt(json_encode(request()->param()), config('app.app_key'));
$log_data = [
'data' => $crypt_data
];
$data->adminLogData()->save($log_data);
}
//创建操作日志
public function createAdminLog($user, $menu)
{
$data = [
'admin_user_id' => $user->id,
'name' => $menu->name,
'log_method' => $menu->log_method,
'url' => request()->pathinfo(),
'log_ip' => request()->ip()
];
$log = AdminLog::create($data);
//加密数据,防脱库
$crypt_data = Crypt::encrypt(json_encode(request()->param()), config('app.app_key'));
$log_data = [
'data' => $crypt_data
];
$log->adminLogData()->save($log_data);
}
}