You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snipe-IT v6(Laravel8)隐藏Admin设置中Branding和LDAP菜单报错

问题描述

我正在使用基于Laravel 8构建的Snipe-IT v6资产管理系统,想隐藏Admin设置页面中的Branding和LDAP菜单,于是注释了routes目录下web.php中的Branding路由代码,结果出现服务器错误;取消注释后错误就消失了。想请教问题出在哪里?我的web.php代码如下:

Route::group(['prefix' => 'admin', 'middleware' => ['auth', 'authorize:superuser']], function () {
    Route::get('settings', [SettingsController::class, 'getSettings'])->name('settings.general.index');
    Route::post('settings', [SettingsController::class, 'postSettings'])->name('settings.general.save');

     // 我注释了这段代码,想隐藏后台设置里的菜单
    // Route::get('branding', [SettingsController::class, 'getBranding'])->name('settings.branding.index');
    // Route::post('branding', [SettingsController::class, 'postBranding'])->name('settings.branding.save');

    Route::get('security', [SettingsController::class, 'getSecurity'])->name('settings.security.index');
    Route::post('security', [SettingsController::class, 'postSecurity'])->name('settings.security.save');

    Route::get('groups', [GroupsController::class, 'index'])->name('settings.groups.index');

    Route::get('localization', [SettingsController::class, 'getLocalization'])->name('settings.localization.index');
    Route::post('localization', [SettingsController::class, 'postLocalization'])->name('settings.localization.save');

    Route::get('notifications', [SettingsController::class, 'getAlerts'])->name('settings.alerts.index');
    Route::post('notifications', [SettingsController::class, 'postAlerts'])->name('settings.alerts.save');

    Route::get('slack', [SettingsController::class, 'getSlack'])->name('settings.slack.index');
    Route::post('slack', [SettingsController::class, 'postSlack'])->name('settings.slack.save');

    Route::get('asset_tags', [SettingsController::class, 'getAssetTags'])->name('settings.asset_tags.index');
    Route::post('asset_tags', [SettingsController::class, 'postAssetTags'])->name('settings.asset_tags.save');

    Route::get('barcodes', [SettingsController::class, 'getBarcodes'])->name('settings.barcodes.index');
    Route::post('barcodes', [SettingsController::class, 'postBarcodes'])->name('settings.barcodes.save');

    Route::get('labels', [SettingsController::class, 'getLabels'])->name('settings.labels.index');
    Route::post('labels', [SettingsController::class, 'postLabels'])->name('settings.labels.save');

    Route::get('ldap', [SettingsController::class, 'getLdapSettings'])->name('settings.ldap.index');
    Route::post('ldap', [SettingsController::class, 'postLdapSettings'])->name('settings.ldap.save');

    Route::get('phpinfo', [SettingsController::class, 'getPhpInfo'])->name('settings.phpinfo.index');

    Route::get('oauth', [SettingsController::class, 'api'])->name('settings.oauth.index');

    Route::get('google', [SettingsController::class, 'getGoogleLoginSettings'])->name('settings.google.index');
    Route::post('google', [SettingsController::class, 'postGoogleLoginSettings'])->name('settings.google.save');

    Route::get('purge', [SettingsController::class, 'getPurge'])->name('settings.purge.index');
    Route::post('purge', [SettingsController::class, 'postPurge'])->name('settings.purge.save');


    Route::get('login-attempts', [SettingsController::class, 'getLoginAttempts'])->name('settings.logins.index');

    // 备份
    Route::group(['prefix' => 'backups', 'middleware' => 'auth'], function () {
        Route::get('download/{filename}',
            [SettingsController::class, 'downloadFile'])->name('settings.backups.download');

        Route::delete('delete/{filename}',
            [SettingsController::class, 'deleteFile'])->name('settings.backups.destroy');

        Route::post('/', 
            [SettingsController::class, 'postBackups']
        )->name('settings.backups.create');

        Route::post('/restore/{filename}', 
            [SettingsController::class, 'postRestore']
        )->name('settings.backups.restore');

        Route::post('/upload', 
            [SettingsController::class, 'postUploadBackup']
        )->name('settings.backups.upload');

        Route::get('/', [SettingsController::class, 'getBackups'])->name('settings.backups.index');
    });

    Route::resource('groups', GroupsController::class, [
        'middleware' => ['auth'],
        'parameters' => ['group' => 'group_id'],
    ]);

    Route::get('/', [SettingsController::class, 'index'])->name('settings.index');
});
问题原因与解决方法

问题根源

直接注释Branding路由会报错,是因为系统的其他地方(比如后台设置页面的侧边栏视图、控制器逻辑)还在调用settings.branding.index这个路由名称,Laravel找不到对应的路由就会抛出路由未找到的异常,导致服务器错误。

而且,菜单的显示逻辑和路由是否存在没有直接绑定——你要隐藏的是菜单,不是禁用路由访问,所以直接动路由是找错了方向。

正确的隐藏方式

隐藏Branding菜单

  1. 找到后台设置页面的侧边栏视图文件,路径一般是resources/views/settings/partials/sidebar.blade.php
  2. 在里面找到Branding对应的菜单代码,大概长这样:
<li class="nav-item">
    <a class="nav-link" href="{{ route('settings.branding.index') }}">
        <i class="fas fa-palette"></i> {{ trans('settings.branding') }}
    </a>
</li>
  1. 把这段代码注释掉或者直接删除,Branding菜单就不会显示了。

隐藏LDAP菜单

用同样的方法,找到LDAP对应的菜单代码,注释或删除即可。如果担心用户直接输入URL访问LDAP设置页面,可以给LDAP路由添加自定义权限限制,而不是删除路由,避免系统其他调用报错。

额外提醒

如果确实需要禁用路由访问,不要直接删除路由,而是给路由添加权限中间件。比如:

Route::get('ldap', [SettingsController::class, 'getLdapSettings'])
    ->name('settings.ldap.index')
    ->middleware('can:access-ldap');

然后在权限系统里不给用户分配access-ldap权限,这样用户既看不到菜单,也无法直接访问页面,还不会触发路由不存在的错误。

内容的提问来源于stack exchange,提问作者aldoprogrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:22:32