拉拉维尔验证站点属于用户



My User.php

class User extends Authenticatable
{
    public function sites()
    {
        return $this->hasMany(Site::class);
    }
}

我的Site.php

class Site extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

我的routes.php

Route::resource('site', 'SiteController');

我的SiteController.php

class SiteController extends Controller
{
    public function edit(int $id)
    {
        $site = Auth::user()->sites()->find($id);
        return view('site.edit', compact('site'));
    }
}

如何验证网站是否属于用户?我知道,就我而言,如果网站不属于用户,$site变量将为空。但是我想要更多的声明性方式,比如 laravel 请求,因为我需要相同的签入showupdatedestroy方法。但是我不能使用laravel请求,因为检查是这样的

$siteId = Route::current()->param('site');
$ids = Auth::user()->sites()->pluck('id')->toArray();
$result = in_array($siteId, $ids);

谁能建议如何实现我的目标?

由于我使用 laravel 5.2,因此不推荐使用带有路由过滤器的解决方案。相反,路由过滤器我们应该使用中间件。
app/Http/Middleware/RestrictPermission.php

class RestrictPermission
{
    public function handle($request, Closure $next)
    {
        $siteId = Route::current()->parameter('site');
        if (!Auth::user()->sites()->find($siteId)) {
            abort(403);
        }
        return $next($request);
    }
}

app/Http/Kernel.php

class Kernel extends HttpKernel
{
    protected $routeMiddleware = [
        'restrict.permission' => RestrictPermission::class,
    ];
}

站点控制器.php

class SiteController extends Controller
{
    public function __construct()
    {
        $this->middleware('restrict.permission', ['except' => [
            'index', 'create', 'store',
        ]]);
    }
    public function edit(int $id)
    {
        $site = Auth::user()->sites()->find($id);
        return view('site.edit', compact('site'));
    }
}

最新更新