Browse Source

用户菜单接口请求权限

master
wanghongjun 1 month ago
parent
commit
d8ae2d3345
  1. 48
      app/Http/Controllers/Admin/BaseController.php
  2. 17
      app/Http/Controllers/Admin/UserController.php
  3. 11
      app/Http/Middleware/AdminAuthMiddleware.php
  4. 17
      app/Http/Middleware/CheckPermission.php
  5. 20
      app/Services/AdminMenuService.php
  6. 4
      config/auth.php
  7. 105
      database/seeders/AdminMenuSeeder.php
  8. 6
      routes/admin/api.php

48
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()
);
}
}
}

17
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()
);
}
}
}

11
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);
}
}

17
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)) {

20
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() : [];
}
}

4
config/auth.php

@ -40,6 +40,10 @@ return [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'sanctum',
'provider' => 'users',
],
],
/*

105
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' => [

6
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']);

Loading…
Cancel
Save