|
|
<?php
|
|
|
|
|
|
namespace App\Services;
|
|
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
class UserService
|
|
|
{
|
|
|
/**
|
|
|
* 从 JWT payload 获取用户完整信息
|
|
|
* @param array|null $payload
|
|
|
* @return object|null
|
|
|
*/
|
|
|
public function getUserInfoFromPayload($payload)
|
|
|
{
|
|
|
if (!$payload || !isset($payload['user_id'])) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return DB::table('sys_user')
|
|
|
->where('id', $payload['user_id'])
|
|
|
->where('deleted', 0)
|
|
|
->first();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 从 Request 获取用户信息
|
|
|
* @param \Illuminate\Http\Request $request
|
|
|
* @return object|null
|
|
|
*/
|
|
|
public function getUserInfoFromRequest($request)
|
|
|
{
|
|
|
$payload = $request->attributes->get('payload');
|
|
|
return $this->getUserInfoFromPayload($payload);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 判断用户是否为管理员
|
|
|
* @param array|null $payload
|
|
|
* @return bool
|
|
|
*/
|
|
|
public function isAdmin($payload)
|
|
|
{
|
|
|
if (!$payload || !isset($payload['roles'])) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
// JWT payload 中已包含 roles,直接判断即可
|
|
|
$roles = $payload['roles'];
|
|
|
|
|
|
// 检查是否包含 admin 或 ADMIN
|
|
|
return in_array('admin', $roles) || in_array('ADMIN', $roles);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 从 Request 判断用户是否为管理员
|
|
|
* @param \Illuminate\Http\Request $request
|
|
|
* @return bool
|
|
|
*/
|
|
|
public function isAdminFromRequest($request)
|
|
|
{
|
|
|
$payload = $request->attributes->get('payload');
|
|
|
return $this->isAdmin($payload);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取用户角色列表
|
|
|
* @param int $userId
|
|
|
* @return array
|
|
|
*/
|
|
|
public function getUserRoles($userId)
|
|
|
{
|
|
|
return DB::table('sys_user_role')
|
|
|
->join('sys_role', 'sys_user_role.role_id', '=', 'sys_role.id')
|
|
|
->where('sys_user_role.user_id', $userId)
|
|
|
->pluck('sys_role.role_code')
|
|
|
->toArray();
|
|
|
}
|
|
|
}
|