首页 文章

Laravel 5.4 - 为多租户应用程序的路由预先安装和应用两个中间件

提问于
浏览
0

我想将 /account/{account_id} 分组以及使用 auth 中间件和中间件来保护其中的每个路由,该中间件将检查记录的用户是否可以访问此帐户 . 不幸的是它不起作用 .

这是我的代码

web.php:

Route::group(['middleware' => 'auth'], function () {
    Route::group(['prefix' => 'account/{account}', 'middleware' => 'userHasPermissionForAccount'], function() {
        Route::group(['prefix' => 'posts'], function () {
            Route::get('{post}', 'PostsController@index')->where([
                'post' => '\d+'
            ]);
        });
        // more routes here...
    });
});

app / http / kernel.php

// ...
protected $routeMiddleware = [
    // ...
    'userHasPermissionForAccount' => \App\Http\Middleware\UserCanAccessContent::class,
];

它甚至没有触发我的自定义中间件中的代码,我不明白为什么 .

1 回答

  • 0

    我会使用策略(门),因为您可以使用策略作为中间件 .

    $ php artisan make:policy AcccountPolicy
    

    AuthServiceProvider 注册该政策:

    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        Account::class => AccountPolicy::class, //Account is model, remember to import!
    ];
    

    在内部策略文件( app/policies/AccountPolicy.php )中,create方法可以说"manage"

    /**
     * Determine if ....
     *
     * @param  \App\User  $current
     * @param  \App\Account  $account
     * @return bool
     */
    public function manage(User $current, Account $account)
    {
        //return some logic here to check if $current is part of $account
    }
    

    然后将此策略用作中间件:

    Route::group(['prefix' => 'account/{account}', 'middleware' => 'can:manage,account'], function...
    

相关问题