From d8ae2d334524aa4ac190ba1bf1e75cd00c534ed2 Mon Sep 17 00:00:00 2001 From: wanghongjun <1445693971@qq.com> Date: Tue, 12 May 2026 09:55:14 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=8F=9C=E5=8D=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=AF=B7=E6=B1=82=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Admin/BaseController.php | 48 +++++--- app/Http/Controllers/Admin/UserController.php | 17 +-- app/Http/Middleware/AdminAuthMiddleware.php | 11 ++ app/Http/Middleware/CheckPermission.php | 17 ++- app/Services/AdminMenuService.php | 20 +++- config/auth.php | 4 + database/seeders/AdminMenuSeeder.php | 105 +++++++++--------- routes/admin/api.php | 6 +- 8 files changed, 130 insertions(+), 98 deletions(-) diff --git a/app/Http/Controllers/Admin/BaseController.php b/app/Http/Controllers/Admin/BaseController.php index 5824bad..1b91786 100644 --- a/app/Http/Controllers/Admin/BaseController.php +++ b/app/Http/Controllers/Admin/BaseController.php @@ -6,7 +6,7 @@ use App\Http\Controllers\Controller; use App\Services\AdminMenuService; use App\Services\ApiResponseService; use Exception; -use Illuminate\Support\Facades\Auth; +use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\ValidationException; use Psr\SimpleCache\InvalidArgumentException; @@ -14,9 +14,11 @@ use Psr\SimpleCache\InvalidArgumentException; class BaseController extends Controller { // 用户信息 - protected array $adminUser; + public array $adminUser; // 用户id - protected int $adminUserId; + public int $adminUserId; + // 菜单uri + protected string $menuUri; /** * @var ApiResponseService @@ -31,8 +33,6 @@ class BaseController extends Controller ApiResponseService $responseService ) { $this->responseService = $responseService; - $this->adminUser = Auth::guard('sanctum')->user() ?? []; - $this->adminUserId = $this->adminUser['id'] ?? 0; } /** @@ -61,31 +61,43 @@ class BaseController extends Controller /** * 功能显示权限 - * @param string $className - * @param array $auth * @return int[] * @throws InvalidArgumentException */ - protected function methodShow(string $className, array $auth = []): array + protected function methodShow(): array { $methodAuthArr = AdminMenuService::auth($this->adminUserId); - $authArr = [ - $className . '/show' => 0, - $className . '/store' => 0, - $className . '/update' => 0, - $className . '/destroy' => 0, - ]; + $roleMenuArr = AdminMenuService::getRoleMenuList($this->menuUri); + $authArr = []; + foreach ($roleMenuArr as $value) { + $authArr[$value] = 0; + } $newArr = []; foreach ($authArr as $authKey => $value) { if (in_array($authKey, $methodAuthArr)) { $authArr[$authKey] = 1; } - $key = explode('/',$authKey); + $key = explode('.',$authKey); $newArr[$key[1]] = $authArr[$authKey]; } - if ($auth) { - $newArr = array_merge($newArr, $auth); - } return $newArr; } + + /** + * @return JsonResponse + * @throws InvalidArgumentException + */ + public function rule(): JsonResponse + { + try { + if (!$this->menuUri) { + throw new Exception(''); + } + return $this->responseService->success($this->methodShow()); + } catch (Exception $e) { + return $this->responseService->systemError( + __('exception.get_data_failed') . ':' . $e->getMessage() + ); + } + } } diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index a9c8d99..b11558f 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -10,6 +10,7 @@ use App\Services\AdminUsersService; use Exception; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\ValidationException; use Psr\SimpleCache\InvalidArgumentException; @@ -32,6 +33,7 @@ class UserController extends BaseController ) { parent::__construct($responseService); $this->AdminUserModelService = $AdminUsersService; + $this->menuUri = 'users'; } /** @@ -269,19 +271,4 @@ class UserController extends BaseController ); } } - - /** - * @return JsonResponse - * @throws InvalidArgumentException - */ - public function rule(): JsonResponse - { - try { - return $this->responseService->success($this->methodShow('users')); - } catch (Exception $e) { - return $this->responseService->systemError( - __('exception.get_data_failed') . ':' . $e->getMessage() - ); - } - } } diff --git a/app/Http/Middleware/AdminAuthMiddleware.php b/app/Http/Middleware/AdminAuthMiddleware.php index 0983a85..54e5f9f 100644 --- a/app/Http/Middleware/AdminAuthMiddleware.php +++ b/app/Http/Middleware/AdminAuthMiddleware.php @@ -83,6 +83,17 @@ class AdminAuthMiddleware $request->merge([]); } + // 间件注入当前用户到控制器 + $controller = $request->route()->getController(); + + // 将当前用户赋值给控制器的 $user 属性(可以自定义属性名) + if (method_exists($controller, 'setCurrentUser')) { + $controller->setCurrentUser($user); + } else { + $controller->adminUser = (array)$user; + $controller->adminUserId = (int )$user['id']; + } + return $next($request); } } diff --git a/app/Http/Middleware/CheckPermission.php b/app/Http/Middleware/CheckPermission.php index 2675cc5..94d8a8b 100644 --- a/app/Http/Middleware/CheckPermission.php +++ b/app/Http/Middleware/CheckPermission.php @@ -2,7 +2,6 @@ namespace App\Http\Middleware; -use App\Models\AdminRoleUsers; use App\Services\AdminMenuService; use App\Services\ApiResponseService; use Closure; @@ -26,12 +25,12 @@ class CheckPermission $user = Auth::guard('sanctum')->user(); $user_id = $user->id; $uriArr = AdminMenuService::auth($user_id); -// if ($this->passedOrNot($action, $uriArr)) { -// return (new ApiResponseService())->error( -// __('middleware.check.user_auth'), -// 400 -// ); -// } + if ($this->passedOrNot($action, $uriArr)) { + return (new ApiResponseService())->error( + __('middleware.check.user_auth'), + 400 + ); + } } return $next($request); } @@ -66,9 +65,9 @@ class CheckPermission } if ($method == $methodArr[0]) { - $newAction .= '/store'; + $newAction .= '.store'; } elseif($method == $methodArr[1]) { - $newAction .= '/update'; + $newAction .= '.update'; } if (in_array($newAction, $uriArr)) { diff --git a/app/Services/AdminMenuService.php b/app/Services/AdminMenuService.php index 89b55a7..3b170f7 100644 --- a/app/Services/AdminMenuService.php +++ b/app/Services/AdminMenuService.php @@ -155,8 +155,26 @@ final class AdminMenuService { $menu_ids = []; if ($user_id) { - $menu_ids = (new self())->getUserRolesMenuIds($user_id); + $menu_ids = (new self(new OperationLogService()))->getUserRolesMenuIds($user_id); } return AdminMenu::getMenuList($parent_id, $menu_ids); } + + public static function getRoleMenuList($uri) + { + $where = [ + ['status', '=', 1], + ['uri', '=', $uri] + ]; + $menu_id = AdminMenu::query()->where($where)->value('id'); + if (!$menu_id) { + return []; + } + $childWhere = [ + ['status', '=', 1], + ['parent_id', '=', $menu_id], + ]; + $uri_arr = AdminMenu::query()->where($childWhere)->pluck('uri'); + return $uri_arr ? $uri_arr->toArray() : []; + } } diff --git a/config/auth.php b/config/auth.php index cae0028..fab0fa7 100644 --- a/config/auth.php +++ b/config/auth.php @@ -40,6 +40,10 @@ return [ 'driver' => 'session', 'provider' => 'users', ], + 'api' => [ + 'driver' => 'sanctum', + 'provider' => 'users', + ], ], /* diff --git a/database/seeders/AdminMenuSeeder.php b/database/seeders/AdminMenuSeeder.php index a6f8cf9..70423d2 100644 --- a/database/seeders/AdminMenuSeeder.php +++ b/database/seeders/AdminMenuSeeder.php @@ -54,48 +54,48 @@ class AdminMenuSeeder extends Seeder return [ 'model_manage' => [ 'event_calendar' => [ - 'uri' => '', + 'uri' => 'eventCalendar', 'child' => [ - 'read_only' => '', - 'add' => '', - 'edit' => '', - 'import' => '', - 'export' => '', - 'delete' => '', - 'batch_delete' => '', - 'download_template' => '', - 'end' => '' + 'read_only' => 'eventCalendar.index', + 'add' => 'eventCalendar.store', + 'edit' => 'eventCalendar.update', + 'import' => 'eventCalendar.import', + 'export' => 'eventCalendar.export', + 'delete' => 'eventCalendar.destroy', + 'batch_delete' => 'eventCalendar.destroy', + 'download_template' => 'eventCalendar.export', + 'end' => 'eventCalendar.end' ] ], 'model_manage' => [ - 'uri' => '', + 'uri' => 'pattern', 'child' => [ - 'read_only' => '', - 'add' => '', - 'edit' => '', - 'batch_import' => '', - 'view_details' => '', - 'download_template' => '', - 'reserved_parking' => '', - 'departure_reminder' => '', - 'add_parking_space' => '', - 'edit_parking_space' => '', - 'delete_parking_space' => '' + 'read_only' => 'pattern.index', + 'add' => 'pattern.store', + 'edit' => 'pattern.update', + 'batch_import' => 'pattern.batchImport', + 'view_details' => 'patternSpace.index', + 'download_template' => 'pattern.importTemplate', + 'reserved_parking' => 'pattern.release', + 'departure_reminder' => 'pattern.change', + 'add_parking_space' => 'patternSpace.store', + 'edit_parking_space' => 'patternSpace.update', + 'delete_parking_space' => 'patternSpace.destroy' ] ] ], 'cat_status' => [ 'cat_map' => [ - 'uri' => '', + 'uri' => 'parkingSpaceMap', 'child' => [ - 'read_only' => '', - 'view' => '' + 'read_only' => 'parkingSpaceMap.floorOverview', + 'view' => 'parkingSpaceMap.map' ] ], 'cat_list' => [ - 'uri' => '', + 'uri' => 'parkingReservation', 'child' => [ - 'read_only' => '', + 'read_only' => 'parkingReservation.index', 'add_new_energy' => '', 'delete_new_energy' => '' ] @@ -108,13 +108,13 @@ class AdminMenuSeeder extends Seeder 'delete' => 'spaceType.delete', 'view_details' => 'spaceType.show', 'edit' => 'spaceType.update', - 'download_template' => '', + 'download_template' => 'licensePlate.importTemplate', 'license_plate_management' => 'licensePlate.index', - 'batch_import' => '', + 'batch_import' => 'licensePlate.import', 'add_license_plate' => 'licensePlate.store', 'delete_license_plate' => 'licensePlate.destroy', 'edit_license_plate' => 'licensePlate.update', - 'clear_license_plate' => '' + 'clear_license_plate' => 'licensePlate.clear' ] ], 'cat_attr' => [ @@ -127,18 +127,18 @@ class AdminMenuSeeder extends Seeder ] ], 'draw_map' => [ - 'uri' => '', + 'uri' => 'map', 'child' => [ - 'read_only' => '' + 'read_only' => 'map.index' ] ], 'parking_information' => [ - 'uri' => '', + 'uri' => 'information', 'child' => [ - 'read_only' => '', - 'add' => '', - 'clear' => '', - 'delete' => '' + 'read_only' => 'information.index', + 'add' => 'information.store', + 'clear' => 'information.clear', + 'delete' => 'information.destroy' ] ] ], @@ -165,12 +165,12 @@ class AdminMenuSeeder extends Seeder ], 'information_center' => [ 'alarm_notice' => [ - 'uri' => '', + 'uri' => 'notice', 'child' => [ - 'read_only' => '', - 'view_details' => '', - 'export' => '', - 'alarm_settings' => '' + 'read_only' => 'notice.index', + 'view_details' => 'notice.show', + 'export' => 'notice.export', + 'alarm_settings' => 'notice.setting' ] ] ], @@ -190,25 +190,25 @@ class AdminMenuSeeder extends Seeder ], 'statistics_report' => [ 'recognition_rate' => [ - 'uri' => '', + 'uri' => 'licensePlateRecognition', 'child' => [ - 'read_only' => '', - 'export' => '' + 'read_only' => 'licensePlateRecognition.index', + 'export' => 'licensePlateRecognition.export' ] ], 'parking_behavior' => [ - 'uri' => '', + 'uri' => 'parkingBehavior', 'child' => [ - 'read_only' => '', - 'export' => '', + 'read_only' => 'parkingBehavior.index', + 'export' => 'parkingBehavior.export', 'view_details' => '' ] ], 'utilization_rate' => [ - 'uri' => '', + 'uri' => 'utilizationRate', 'child' => [ - 'read_only' => '', - 'export' => '' + 'read_only' => 'utilizationRate.index', + 'export' => 'utilizationRate.export' ] ], 'occupancy_rate' => [ @@ -285,7 +285,8 @@ class AdminMenuSeeder extends Seeder 'read_only' => 'users.index', 'add' => 'users.store', 'edit' => 'users.update', - 'delete' => 'users.destroy' + 'delete' => 'users.destroy', + 'show' => 'users.show' ] ], 'role_manage' => [ diff --git a/routes/admin/api.php b/routes/admin/api.php index 91cdde4..2d82251 100644 --- a/routes/admin/api.php +++ b/routes/admin/api.php @@ -95,7 +95,7 @@ Route::group(['prefix' => 'admin'], function () { Route::get('/spaceType', [ParkingSpaceTypeController::class, 'index']); Route::get('/spaceType/create', [ParkingSpaceTypeController::class, 'create']); Route::post('/spaceType', [ParkingSpaceTypeController::class, 'store']); - Route::get('/spaceType/{id}', [ParkingSpaceTypeController::class, 'show']); + Route::get('/spaceType/show/{id}', [ParkingSpaceTypeController::class, 'show']); Route::get('/spaceType/edit/{id}', [ParkingSpaceTypeController::class, 'edit']); Route::put('/spaceType/{id}', [ParkingSpaceTypeController::class, 'update']); Route::delete('/spaceType/{id}', [ParkingSpaceTypeController::class, 'destroy']); @@ -189,7 +189,7 @@ Route::group(['prefix' => 'admin'], function () { Route::get('/roles/create', [RolesController::class, 'create']); Route::post('/roles', [RolesController::class, 'store']); Route::get('/roles/{id}', [RolesController::class, 'show']); - Route::get('/roles/edit/{id}', [RolesController::class, 'edit']); + Route::get('/roles/show/edit/{id}', [RolesController::class, 'edit']); Route::put('/roles/{id}', [RolesController::class, 'update']); Route::delete('/roles/{id}', [RolesController::class, 'destroy']); Route::get('/roles/rule', [RolesController::class, 'rule']); @@ -197,7 +197,7 @@ Route::group(['prefix' => 'admin'], function () { Route::get('/users', [UserController::class, 'index']); Route::get('/users/create', [UserController::class, 'create']); Route::post('/users', [UserController::class, 'store']); - Route::get('/users/{id}', [UserController::class, 'show']); + Route::get('/users/show/{id}', [UserController::class, 'show']); Route::get('/users/edit/{id}', [UserController::class, 'edit']); Route::put('/users/{id}', [UserController::class, 'update']); Route::delete('/users/{id}', [UserController::class, 'destroy']);