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