From 082c15d697cfc776ef35e4ffcad016b2515bfb47 Mon Sep 17 00:00:00 2001 From: ctexthuang Date: Wed, 17 Sep 2025 16:17:55 +0800 Subject: [PATCH] fix : first finish --- app/Common/Repository/AdminRoleRepository.php | 20 +++++++++++++ app/Middleware/Admin/AdminTokenMiddleware.php | 10 +++++++ app/Middleware/Admin/PermissionMiddleware.php | 1 + .../Admin/RefreshAdminTokenMiddleware.php | 9 ++++++ .../Token/AbstractTokenMiddleware.php | 8 +++++ app/Model/AdminMenu.php | 4 +-- app/Model/AdminRole.php | 10 +++---- app/Request/Admin/AdminRoleRequest.php | 6 ++-- app/Request/Admin/AdminUserRequest.php | 2 +- app/Service/Admin/AdminUser/MenuService.php | 5 ++-- app/Service/Admin/AdminUser/RoleService.php | 1 + app/Service/Admin/AdminUser/UserService.php | 8 +---- app/Service/Admin/BaseAdminService.php | 29 ++++++++++++------- app/Service/Admin/Login/LoginService.php | 1 - app/Service/BaseTokenService.php | 16 ---------- 15 files changed, 82 insertions(+), 48 deletions(-) diff --git a/app/Common/Repository/AdminRoleRepository.php b/app/Common/Repository/AdminRoleRepository.php index 26393df..60f89e6 100644 --- a/app/Common/Repository/AdminRoleRepository.php +++ b/app/Common/Repository/AdminRoleRepository.php @@ -11,8 +11,28 @@ declare(strict_types=1); namespace App\Common\Repository; use App\Model\AdminRole; +use Hyperf\Collection\Arr; +use Hyperf\Database\Model\Builder; final class AdminRoleRepository extends BaseRepository { public function __construct(protected readonly AdminRole $model) {} + + /** + * @param Builder $query + * @param array $params + * @return Builder + */ + public function handleSearch(Builder $query, array $params): Builder + { + return $query->when(Arr::get($params, 'name'), static function (Builder $query, $name) { + $query->where('name', 'like', '%' . $name . '%'); + })->when(Arr::get($params, 'code'), static function (Builder $query, $code) { + $query->whereIn('code', Arr::wrap($code)); + })->when(Arr::has($params, 'status'), static function (Builder $query) use ($params) { + $query->where('status', $params['status']); + })->when(Arr::get($params, 'created_at'), static function (Builder $query, $createdAt) { + $query->whereBetween('created_at', $createdAt); + }); + } } \ No newline at end of file diff --git a/app/Middleware/Admin/AdminTokenMiddleware.php b/app/Middleware/Admin/AdminTokenMiddleware.php index adf6c33..4b0b0a8 100644 --- a/app/Middleware/Admin/AdminTokenMiddleware.php +++ b/app/Middleware/Admin/AdminTokenMiddleware.php @@ -8,6 +8,7 @@ use App\Common\Interface\JwtInterface; use App\Constants\ResultCode; use App\Exception\ErrException; use App\Middleware\Token\AbstractTokenMiddleware; +use Hyperf\Context\Context; use Lcobucci\JWT\Token\RegisteredClaims; use Lcobucci\JWT\UnencryptedToken; use function Hyperf\Support\env; @@ -29,4 +30,13 @@ final class AdminTokenMiddleware extends AbstractTokenMiddleware if ($audience !== env('APP_NAME') .'_admin') throw new ErrException('token错误',ResultCode::JWT_ERROR); } + + /** + * @param UnencryptedToken $token + * @return void + */ + public function setContext(UnencryptedToken $token): void + { + Context::set('current_admin_id',(int)$token->claims()?->get(RegisteredClaims::ID) ?? 0); + } } diff --git a/app/Middleware/Admin/PermissionMiddleware.php b/app/Middleware/Admin/PermissionMiddleware.php index ccd3c16..7f8e53a 100644 --- a/app/Middleware/Admin/PermissionMiddleware.php +++ b/app/Middleware/Admin/PermissionMiddleware.php @@ -74,6 +74,7 @@ class PermissionMiddleware implements MiddlewareInterface /** * @var Permission[] $permissions */ + $permissions = []; $classAnnotation && $permissions[] = $classAnnotation; $methodPermission = Arr::get($annotations, Permission::class); $methodPermission && $permissions[] = $methodPermission; diff --git a/app/Middleware/Admin/RefreshAdminTokenMiddleware.php b/app/Middleware/Admin/RefreshAdminTokenMiddleware.php index 6c980f7..04f89b0 100644 --- a/app/Middleware/Admin/RefreshAdminTokenMiddleware.php +++ b/app/Middleware/Admin/RefreshAdminTokenMiddleware.php @@ -68,4 +68,13 @@ class RefreshAdminTokenMiddleware extends AbstractTokenMiddleware if ($audience !== env('APP_NAME') .'_admin') throw new ErrException('token错误',ResultCode::JWT_ERROR); } + + /** + * @param UnencryptedToken $token + * @return void + */ + public function setContext(UnencryptedToken $token): void + { + return; + } } diff --git a/app/Middleware/Token/AbstractTokenMiddleware.php b/app/Middleware/Token/AbstractTokenMiddleware.php index bd1cf1a..1f04e5a 100644 --- a/app/Middleware/Token/AbstractTokenMiddleware.php +++ b/app/Middleware/Token/AbstractTokenMiddleware.php @@ -35,6 +35,8 @@ abstract class AbstractTokenMiddleware $this->checkToken->checkJwt($token); $this->checkIssuer($token); + $this->setContext($token); + return $handler->handle( value( static function (ServerRequestPlusInterface $request, UnencryptedToken $token) { @@ -54,6 +56,12 @@ abstract class AbstractTokenMiddleware abstract public function getJwt(): JwtInterface; + /** + * @param UnencryptedToken $token + * @return void + */ + abstract public function setContext(UnencryptedToken $token): void; + /** * @param ServerRequestInterface $request * @return Token diff --git a/app/Model/AdminMenu.php b/app/Model/AdminMenu.php index fe4d1e0..c521016 100644 --- a/app/Model/AdminMenu.php +++ b/app/Model/AdminMenu.php @@ -85,8 +85,8 @@ class AdminMenu extends Model return $this->belongsToMany( AdminRole::class, 'admin_role_belongs_menu', - 'menu_id', - 'role_id' + 'admin_menu_id', + 'admin_role_id' ); } diff --git a/app/Model/AdminRole.php b/app/Model/AdminRole.php index 1c51110..467f49c 100644 --- a/app/Model/AdminRole.php +++ b/app/Model/AdminRole.php @@ -65,9 +65,9 @@ class AdminRole extends Model { return $this->belongsToMany( AdminMenu::class, - 'role_belongs_menu', - 'role_id', - 'menu_id' + 'admin_role_belongs_menu', + 'admin_role_id', + 'admin_menu_id' ); } @@ -79,8 +79,8 @@ class AdminRole extends Model return $this->belongsToMany( AdminUser::class, 'admin_user_belongs_role', - 'role_id', - 'user_id' + 'admin_role_id', + 'admin_user_id' ); } diff --git a/app/Request/Admin/AdminRoleRequest.php b/app/Request/Admin/AdminRoleRequest.php index 4381cbc..e828f4f 100644 --- a/app/Request/Admin/AdminRoleRequest.php +++ b/app/Request/Admin/AdminRoleRequest.php @@ -36,13 +36,13 @@ class AdminRoleRequest extends FormRequest 'sort' => 'required|integer', 'remark' => 'nullable|string|max:255', 'permissions' => 'sometimes|array', - 'permissions.*' => 'string|exists:menu,name', + 'permissions.*' => 'string|exists:admin_menu,name', ]; if ($this->isCreate()) { - $rules['code'][] = 'unique:role,code'; + $rules['code'][] = 'unique:admin_role,code'; } if ($this->isUpdate()) { - $rules['code'][] = 'unique:role,code,' . $this->route('id'); + $rules['code'][] = 'unique:admin_role,code,' . $this->route('id'); } return $rules; diff --git a/app/Request/Admin/AdminUserRequest.php b/app/Request/Admin/AdminUserRequest.php index fe1efab..5a5b51c 100644 --- a/app/Request/Admin/AdminUserRequest.php +++ b/app/Request/Admin/AdminUserRequest.php @@ -34,7 +34,7 @@ class AdminUserRequest extends FormRequest 'remark' => 'sometimes|string|max:255', 'password' => 'sometimes|string|min:6|max:20', 'role_codes' => 'required|array', - 'role_codes.*' => 'string|exists:role,code', + 'role_codes.*' => 'string|exists:admin_role,code', ]; } diff --git a/app/Service/Admin/AdminUser/MenuService.php b/app/Service/Admin/AdminUser/MenuService.php index 1bd5f0a..8f77561 100644 --- a/app/Service/Admin/AdminUser/MenuService.php +++ b/app/Service/Admin/AdminUser/MenuService.php @@ -40,9 +40,10 @@ class MenuService extends BaseAdminService */ public function create(): array { - $data = array($this->getRequestData(),[ + $data = array_merge($this->getRequestData(),[ 'created_by' => $this->adminId ]); + if (empty($data['parent_id'])) $data['parent_id'] = 0; /** * @var AdminMenu $model */ @@ -75,7 +76,7 @@ class MenuService extends BaseAdminService */ public function update(int $id): array { - $data = array($this->getRequestData(),[ + $data = array_merge($this->getRequestData(),[ 'updated_by' => $this->adminId ]); diff --git a/app/Service/Admin/AdminUser/RoleService.php b/app/Service/Admin/AdminUser/RoleService.php index 92393b0..217ad24 100644 --- a/app/Service/Admin/AdminUser/RoleService.php +++ b/app/Service/Admin/AdminUser/RoleService.php @@ -96,6 +96,7 @@ class RoleService extends BaseAdminService public function getRole(int $id): array { return $this->adminReturn->success( + 'success', $this->adminRoleRepository ->findById($id) ->adminMenus() diff --git a/app/Service/Admin/AdminUser/UserService.php b/app/Service/Admin/AdminUser/UserService.php index ff35970..d420e39 100644 --- a/app/Service/Admin/AdminUser/UserService.php +++ b/app/Service/Admin/AdminUser/UserService.php @@ -44,17 +44,11 @@ class UserService extends BaseAdminService #[Inject] protected AdminRoleRepository $adminRoleRepository; - #[Inject] - protected RedisCache $redisCache; - /** * @return array */ public function handle(): array { - $this->redisCache->with()->set('123',1); - $this->redisCache->with()->lua(RateLimit::class)->check('user:123', 10, 60); - return $this->adminReturn->success( 'success', Arr::only( @@ -188,7 +182,7 @@ class UserService extends BaseAdminService 'code' => $this->request->input('role_codes') ])->map(static function(AdminRole $adminRole) { return $adminRole->id; - })->all() + }) ); return $this->adminReturn->success(); diff --git a/app/Service/Admin/BaseAdminService.php b/app/Service/Admin/BaseAdminService.php index dee815c..2190b16 100644 --- a/app/Service/Admin/BaseAdminService.php +++ b/app/Service/Admin/BaseAdminService.php @@ -10,12 +10,12 @@ declare(strict_types=1); namespace App\Service\Admin; +use App\Exception\ErrException; use App\Lib\Jwt\RequestScopedTokenTrait; use App\Lib\Return\AdminReturn; use Hyperf\Context\Context; use Hyperf\Di\Annotation\Inject; use Hyperf\HttpServer\Contract\RequestInterface; -use Lcobucci\JWT\Token\RegisteredClaims; abstract class BaseAdminService { @@ -36,20 +36,27 @@ abstract class BaseAdminService protected AdminReturn $adminReturn; /** - * 管理员 id - * @var int + * @param string $name + * @return \current_admin_id|mixed */ - protected int $adminId = 0; - - /** - * 主构造函数 - */ - public function __construct() + public function __get(string $name) { - $this->adminId = (int) $this->getToken()?->claims()?->get(RegisteredClaims::ID) ?? 0; - if ($this->adminId > 0) Context::set('current_admin_id', $this->adminId); + if ($name === 'adminId') return Context::get('current_admin_id',0); + + if (!property_exists($this, $name)) throw new ErrException('属性未定义'); + + return $this->$name; } +// /** +// * 主构造函数 +// */ +// public function __construct() +// { +// $this->adminId = Context::get('current_admin_id',0); +// var_dump('BaseAdminService获取到的'.$this->adminId); +// } + /** * 主函数抽象类 */ diff --git a/app/Service/Admin/Login/LoginService.php b/app/Service/Admin/Login/LoginService.php index 88164c8..15c758d 100644 --- a/app/Service/Admin/Login/LoginService.php +++ b/app/Service/Admin/Login/LoginService.php @@ -46,7 +46,6 @@ class LoginService extends BaseAdminService } if ($adminInfo->status == AdminUserStatusCode::DISABLE) throw new ErrException('用户已禁用'); - $jwtHandle = $this->tokenService->setJwt('admin')->getJwt(); return $this->adminReturn->success('success',[ diff --git a/app/Service/BaseTokenService.php b/app/Service/BaseTokenService.php index 3c4aeaa..14cf9e5 100644 --- a/app/Service/BaseTokenService.php +++ b/app/Service/BaseTokenService.php @@ -55,20 +55,4 @@ final class BaseTokenService implements CheckTokenInterface $this->jwt = $jwt; return $this; } - - /** - * @param UnencryptedToken $token - * @return \Closure - */ - public function refreshToken(UnencryptedToken $token): \Closure - { - return value(static function (JwtInterface $jwt) use ($token) { - $jwt->addBlackList($token); - return [ - 'access_token' => $jwt->builderAccessToken($token->claims()->get(RegisteredClaims::ID))->toString(), - 'refresh_token' => $jwt->builderRefreshToken($token->claims()->get(RegisteredClaims::ID))->toString(), - 'expire_at' => (int) $jwt->getConfig('ttl', 0), - ]; - }, $this->getJwt()); - } } \ No newline at end of file