我怎样才能让用户只在他/她在Voyager Laravel中创建的记录上做CRUD?

时间:2018-05-22 18:04:34

标签: laravel voyager

我是laravel和voyager的新手

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

1 个答案:

答案 0 :(得分:0)

Landlord应该可以很好地工作。

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

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

例如,如果您使用列名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

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

Route::group(['prefix' => 'admin', 'middleware'=>'landlord'], function () {
    // routes here
});