3

我是 laravel 和 voyager 的新手

我有一个关于航海者的问题。问题是..我想让用户只对他/她创建的记录进行 CRUD,因此他/她将无法访问其他用户的记录,但只能对他/她的记录进行添加-编辑-删除。如何在 voyager 中存档?默认权限适用于所有记录,不会过滤用户特定记录:(

4

1 回答 1

1

房东应该完美地解决这个问题。

Landlord 将为 Eloquent 应用一个全局范围,自动过滤记录。它在堆栈中的级别低于 Voyager,这意味着您不需要在 Voyager 端进行任何额外配置。

使用 Landlord,您只需在所有 CRUD 表中添加一列来标识记录的所有权,然后让 Landlord 知道这一点。

例如,如果您使用列 name user_id,那么您可以将范围限定为任何地方的用户(例如在您的中间件中),其调用非常简单,如Landlord::addTenant('user_id', $userIdHere);下面的示例中间件:

<?php
namespace App\Http\Middleware;
use Closure;
use App\User;
use Landlord as LandlordManager;

class Landlord {
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->user()) {
            LandlordManager::addTenant($request->user());
            LandlordManager::applyTenantScopesToDeferredModels();
        }
    }
}

然后转到App/Http/Kernel.php,找到$routeMiddleware数组并添加:

'landlord' => \App\Http\Middleware\Landlord::class

然后根据文档https://laravel.com/docs/master/middlewareapp/routes/web.php中您最喜欢的风格,将此中间件应用到任何单个路由或路由组。一个例子是:

Route::group(['prefix' => 'admin', 'middleware'=>'landlord'], function () {
    // routes here
});
于 2018-07-09T07:04:52.527 回答