我的user模型有不同的角色,它们之间存在着inheritance关系,例如: admin是superadmin的一个子类。
我试图在我的路由上放弃这种关系,以便组织它们并避免这样的路由:
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访问。除了提到管理路由中的超级管理之外,还有其他方法在路由文件中实现继承概念吗?
/*ADMIN ROLES*/
Route::group(['middleware' => ['auth.jwt:admin,superadmin']], function () {
require base_path('routes/roles/Admin.php');
});特别是我的树很长,在管理下有这么多的角色
发布于 2019-01-15 12:06:47
是的,您可以通过在routes文件夹中创建新的路由文件来完全分离它们,然后映射它们。
admin.php文件夹中创建/routes和superadmin.php路由。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:/{前缀}/您的路由-这里
name:给你的路线组命名,例如。route('superadmin.users.add')
namespace:您的控制器在哪里
group:您的路由文件在哪里
在路由文件中,您可以像普通来宾/web路由一样添加路由。只需一个接一个地添加它们,甚至重新组合它们。但是,为了方便起见,上面的内容已经按前缀进行了分组:/admin or /superadmin,并命名为admin. or superadmin.,以及附加的中间件。
在控制台/终端中键入php artisan route:list并查看结果!
有了以上这些,我总是将我的/admin或/dashboard与/ (来宾)路线分开。这样清洁多了!:)
发布于 2019-01-15 11:42:21
中间件组
你可以用一种我认为适合你的需要的方式把餐具组合在一起;
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
});
});这应该允许您只在彼此内部嵌套中间件组,以提供路由的分层列表。
https://stackoverflow.com/questions/54197720
复制相似问题