我是 laravel 和 voyager 的新手
我有一个关于航海者的问题。问题是..我想让用户只对他/她创建的记录进行 CRUD,因此他/她将无法访问其他用户的记录,但只能对他/她的记录进行添加-编辑-删除。如何在 voyager 中存档?默认权限适用于所有记录,不会过滤用户特定记录:(
房东应该完美地解决这个问题。
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
});