首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel 5.4 -为多租户应用程序的路由添加前缀并应用两个中间件

Laravel 5.4 -为多租户应用程序的路由添加前缀并应用两个中间件
EN

Stack Overflow用户
提问于 2017-06-22 05:58:50
回答 1查看 229关注 0票数 0

我想对/account/{account_id}进行分组,并使用auth中间件和一个中间件来保护其中的每条路由,该中间件将检查登录的用户是否有权访问此帐户。不幸的是,它不起作用。

以下是我的代码

web.php:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
// ...
protected $routeMiddleware = [
    // ...
    'userHasPermissionForAccount' => \App\Http\Middleware\UserCanAccessContent::class,
];

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

EN

回答 1

Stack Overflow用户

发布于 2017-06-22 18:57:28

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

代码语言:javascript
运行
复制
$ php artisan make:policy AcccountPolicy

AuthServiceProvider中注册策略

代码语言:javascript
运行
复制
/**
 * The policy mappings for the application.
 *
 * @var array
 */
protected $policies = [
    Account::class => AccountPolicy::class, //Account is model, remember to import!
];

在策略文件(app/policies/AccountPolicy.php),创建方法中,让我们说“管理”

代码语言:javascript
运行
复制
/**
 * 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
}

然后使用此策略作为中间件:

代码语言:javascript
运行
复制
Route::group(['prefix' => 'account/{account}', 'middleware' => 'can:manage,account'], function...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44686936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档