我的网站上有一个表格users
,并且如果该用户是admin或他/她的帐户,则允许用户更新该用户。我可以将此规则放入中间件中,并将其强加到路由上,但是我想创建单独的中间件,并在其中创建OR
。我可以这样做吗?
以下代码
Route::group(['middleware' => ['admin','Owner']],
function () {
Route::resource('roles', 'RoleController');
Route::resource('locations', 'LocationController');
Route::resource('recipients', 'RecipientController');
Route::resource('classifications', 'ClassificationController');
});
具有AND
的行为。我认为可以在if ... else ...
或web.php
内使用一些UserController
语句来做到这一点,但我需要知道是否还有其他出路。
预先感谢
这是所有者中间件
class OwnerMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $id)
{
if(Auth::guest())
return abort(403, 'Access Denied');
if(Auth::user()->id != $id)
return abort(403, 'Access Denied');
return $next($request);
}
}
然后我将$id
参数传递给它。
答案 0 :(得分:1)
中间件确实没有“或”。它要么起作用要么通过。您必须扩展当前的中间件以检查所有权或编辑权限。
但是,我建议使用带有中间件的策略来解决此问题: 参见:https://laravel.com/docs/master/authorization#via-middleware