diff --git a/app/Http/Controllers/Menu/MenusController.php b/app/Http/Controllers/Menu/MenusController.php index 79ca3e4..1cf8b9e 100644 --- a/app/Http/Controllers/Menu/MenusController.php +++ b/app/Http/Controllers/Menu/MenusController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use App\Models\Log as LogModel; use App\Models\Menu; use App\Http\Resources\MenusResource; +use App\Utils\ArrayUtils; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; @@ -25,11 +26,29 @@ class MenusController extends Controller public function index(Request $request) { $permissions = $request->user()->getPermissionsViaRoles()->toArray(); - $permissions = array_column($permissions, 'name'); + $names = array_column($permissions, 'name'); + $routes = include(resource_path('lang/zh-CN/permission.php')); + $routesIndexWithId = []; + foreach ($routes as $code => $route) { + $route['code'] = $code; + $routesIndexWithId[$route['id']] = $route; + } + $permissionCodes = $names; + foreach ($routes as $code => $route) { + if (empty($route['parent_id']) || !in_array($code, $names, true)) { + continue; + } + $parent = $routesIndexWithId[$route['parent_id']]; + $permissionCodes[] = $parent['code']; + if ($parent['parent_id']) { + $permissionCodes[] = $routesIndexWithId[$parent['parent_id']]['code']; + } + } + $permissionCodes = array_unique($permissionCodes); $menus = Menu::query()->orderBy('parent_id')->orderBy('seq')->get()->toArray(); $hasPermissionMenus = []; foreach ($menus as $menu) { - if (in_array($menu['code'], $permissions, true)) { + if (in_array($menu['code'], $permissionCodes, true)) { $hasPermissionMenus[] = $menu; } }