Laravel:有没有一种方法可以将路由组织到分层树中

时间:2019-01-15 11:12:26

标签: laravel routes authorization

我的const str = '50 Samuël 1 en 2'; console.log(str.split(/(\d+)(.+)/).filter(e => e));模型具有彼此之间具有user关系的不同角色,例如:admin是超级管理员的孩子。

我正尝试在我的路线上放弃这种关系,以便组织它们并避免使用类似以下路线:

inheritance

我将每个角色路线都移到了文件Route::group(['namespace' => 'Admin\MultiDispatch', 'middleware' => ['auth.jwt:superadmin|admin']], function () { }); Admin.php中 并需要SuperAdmin.php中的文件:

routes.php

,在 /*ADMIN ROLES*/ Route::group(['middleware' => ['auth.jwt:admin']], function () { require base_path('routes/roles/Admin.php'); }); /*SUPERADMIN ROLES */ Route::group(['middleware' => ['auth.jwt:superadmin']], function () { require base_path('routes/roles/SuperAdmin.php'); }); 中,我再次需要superadmin.php文件,因为Admin.php应该扩展所有superadmin路由:

admin

但是似乎 <?php require base_path('routes/roles/Admin.php'); 中存在的端点仅可用于Admin.php访问。 除了在管理路由中提及superadmin之外,还有其他方法可以在路由文件中实现继承概念吗?

superadmin

尤其是我的树很长,并且在admin下有很多角色

2 个答案:

答案 0 :(得分:1)

是的,您可以通过在routes文件夹中创建新的路由文件然后进行映射来完全分离它们。

  • 在您的admin.php文件夹中创建superadmin.php/routes路由。
  • 转到app/Providers/RouteServiceProvider.php
  • 如果要为其使用单独的控制器,请为其创建单独的命名空间:
    public function map()
    {
        ...
        $this->mapAdminRoutes();
        $this->mapSuperAdminRoutes();
        ...
    }

    protected function mapAdminRoutes()
    {
        Route::prefix('admin')
            ->middleware(['web', 'auth.jwt:admin'])
            ->namespace('App\Http\Controllers\Admin')
            ->name('admin.')
            ->group(base_path('routes/admin.php'));
    }

    protected function mapSuperAdminRoutes()
    {
        Route::middleware('web', 'auth.jwt:superadmin')
            ->namespace('App\Http\Controllers\SuperAdmin')
            ->name('superadmin.')
            ->group(base_path('routes/superadmin.php'));
    }

选中namespace,这意味着您可以将不同的控制器放在不同的文件夹中,例如。 App\Http\Controllers\Admin中的管理控制器,因此您可以在app/Http/Controllers中创建一个名为Admin的文件夹。然后在控制器中,将命名空间更改为namespace App\Http\Controllers\Admin;,然后将use App\Http\Controllers\Controller;更改为要从其扩展的BaseController。

prefix:/ {prefix} /您的路线在这里
name:命名路由组,例如。 route('superadmin.users.add')
namespace:您的控制器所在的位置
group:您的路线文件在哪里

在路由文件中,您可以像添加普通来宾/网络路由一样添加路由。只需将它们一个接一个地添加,甚至可以再次将它们分组。但是以上内容已经按前缀/admin or /superadmin进行了分组,并命名为admin. or superadmin.,并附加了中间件,并且为了方便起见,将它们放在不同的文件夹中。

在控制台/终端中输入php artisan route:list,然后查看结果!

使用上述方法,我总是将/admin/dashboard/(来宾)路线分开。这样更清洁! :)

答案 1 :(得分:0)

中间件组

您可以按照我认为适合您的方式将中间件分组在一起;

Route::middleware(['auth.jwt:admin'])->group(function(){

  // Routes that need admin middleware access go here

  Route::middleware([''auth.jwt:superadmin''])->group(function(){

    // Routes that need admin AND superadmin middleware access go here

  });

});

这应该允许您将中间件组彼此嵌套在一起,以提供路由的分层列表。