Files
xin-procurement/app/Http/Controllers/Mini/BaseMiniController.php
T

54 lines
1.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Http\Controllers\Mini;
use App\Exceptions\RepositoryException;
use App\Models\StoreModel;
use Illuminate\Http\Request;
use Modules\Common\Http\Controllers\BaseController;
use Modules\SystemUser\Models\SysAccessToken;
/**
* 小程序端控制器基类
*
* 无 #[RequestAttribute],不会被 AnnoRoute 注册为路由。
* 门店即用户:登录主体就是门店(store 表),提供当前门店获取与状态校验。
*/
abstract class BaseMiniController extends BaseController
{
/**
* 当前登录门店(auth:sanctum 注入的 tokenable
*/
protected function currentStore(Request $request): StoreModel
{
$store = StoreModel::find($request->user()->id);
if ($store === null || $store->status === StoreModel::STATUS_DISABLED) {
throw new RepositoryException('账号不存在或已被停用');
}
return $store;
}
/**
* 可选登录场景手动识别当前门店(路由关闭 authorize 时使用)
*
* 手动解析 Bearer token;未携带 token、token 无效或非门店账号时返回 null(不抛错)。
*/
protected function optionalStore(Request $request): ?StoreModel
{
$token = $request->bearerToken();
if (empty($token)) {
return null;
}
$accessToken = SysAccessToken::findToken($token);
if ($accessToken === null || $accessToken->tokenable_type !== StoreModel::class) {
return null;
}
$store = StoreModel::find($accessToken->tokenable_id);
if ($store === null || $store->status === StoreModel::STATUS_DISABLED) {
return null;
}
return $store;
}
}