【问题标题】:laravel specify the routes for every rolelaravel 为每个角色指定路由
【发布时间】:2023-02-03 02:23:52
【问题描述】:

我正在尝试为我的应用程序中的不同角色设置路由,但我遇到了错误。我想知道我使用的方法是否正确。我想为每个角色指定路线,但我不确定我的方法是否适合实现此目的。

这是我的 web.php 文件:

<?php

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/


//guest pages
Route::get('/', function () {
  return redirect()->route('login');
});

Auth::routes();

route::middleware('auth')->group(function () {
  Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
  Route::middleware('hasRole:Super Admin')->prefix('SuperAdmin')->group(function () {
    Route::prefix('users')->group(function () {
      //users routes
      Route::get('', [\App\Http\Controllers\UserController::class, 'index'])->name('users.index');
      Route::get('profile/{id}', [\App\Http\Controllers\ProfileController::class, 'show'])->name('profile.show');
      Route::put('profile/{id}', [\App\Http\Controllers\ProfileController::class, 'update'])->name('profile.update');
      Route::delete('/delete_user/{id}', [\App\Http\Controllers\UserController::class, 'destroy'])->name('users.destroy');
      Route::get('ajouter_utilisateur', [App\Http\Controllers\UserController::class, 'create'])->name('user.create');
      Route::post('ajouter_utilisateur', [App\Http\Controllers\UserController::class, 'store'])->name('user.store');
    });
    Route::prefix('fournisseurs')->name('fournisseur.')->group(function () {
      //fournisseurs routes
      Route::get('', [App\Http\Controllers\FournisseurController::class, 'index'])->name('index');
      Route::delete('{id}', [App\Http\Controllers\FournisseurController::class, 'destroy'])->name('destroy');
      Route::get('edit_fournisseur/{id}', [\App\Http\Controllers\FournisseurController::class, 'edit'])->name('edit');
      Route::put('fournisseurs/{id}', [\App\Http\Controllers\FournisseurController::class, 'update'])->name('update');
      Route::get('ajouter_fournisseur', [App\Http\Controllers\FournisseurController::class, 'create'])->name('create');
      Route::post('ajouter_fournisseur', [App\Http\Controllers\FournisseurController::class, 'store'])->name('store');
    });
    Route::prefix('factures')->name('facture.')->group(function () {
      //factures routes
      Route::get('', [App\Http\Controllers\FactureController::class, 'index'])->name('index');
      Route::delete('{id}', [App\Http\Controllers\FactureController::class, 'destroy'])->name('destroy');
      Route::get('ajouter_facture', [App\Http\Controllers\FactureController::class, 'create'])->name('create');
      Route::post('ajouter_facture', [App\Http\Controllers\FactureController::class, 'store'])->name('store');
      Route::get('download/{id}', [App\Http\Controllers\FactureController::class, 'downloadFacture'])->name('downloadFacture');
    });
  });

  Route::middleware('hasRole:Admin')->prefix('Admin')->group(function () {
    Route::prefix('users')->group(function () {
      //users routes
      Route::get('', [\App\Http\Controllers\UserController::class, 'index'])->name('users.index');
      Route::get('profile/{id}', [\App\Http\Controllers\ProfileController::class, 'show'])->name('profile.show');
      Route::put('profile/{id}', [\App\Http\Controllers\ProfileController::class, 'update'])->name('profile.update');
      Route::delete('/delete_user/{id}', [\App\Http\Controllers\UserController::class, 'destroy'])->name('users.destroy');
      Route::get('ajouter_utilisateur', [App\Http\Controllers\UserController::class, 'create'])->name('user.create');
      Route::post('ajouter_utilisateur', [App\Http\Controllers\UserController::class, 'store'])->name('user.store');
    });
    Route::prefix('fournisseurs')->name('fournisseur.')->group(function () {
      //fournisseurs routes
      Route::get('', [App\Http\Controllers\FournisseurController::class, 'index'])->name('index');
    });
    Route::prefix('factures')->name('facture.')->group(function () {
      //factures routes
      Route::get('', [App\Http\Controllers\FactureController::class, 'index'])->name('index');
      Route::get('download/{id}', [App\Http\Controllers\FactureController::class, 'downloadFacture'])->name('downloadFacture');
    });
  });
});

有了这个解决方案,我得到了错误信息

优化失败(有关详细信息,请参阅输出控制台)

有人可以帮助我找到解决此问题的方法或建议我正确的方法吗?

【问题讨论】:

  • 什么是完整的错误?
  • 如果您将其重构为 Route::resource() 也很好
  • 我通过为第二个角色组添加名称解决了错误,但在这种情况下,我每次都需要通过角色名称调用路由,这不是我想要的,我需要调用路由并加载路由如果用户被授权。

标签: php laravel


【解决方案1】:

对于 Laravel 中的角色管理,我建议您使用“spatie/Laravel-permission”。 这是文档链接: https://spatie.be/docs/laravel-permission/v5/introduction 安装此软件包后,您必须为每个角色创建中间件,然后检查 web.php 上的那些

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2019-09-21
    • 2013-05-16
    • 1970-01-01
    • 2020-10-11
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多