【发布时间】:2020-06-09 02:44:52
【问题描述】:
我有多个具有多个权限的用户。一个用户可以属于唯一的单个角色,但该角色可以拥有多个权限,例如create、read、update、delete。我有一个RoleMiddleware。我正在验证roleMiddleware 中的用户。但是如何保护RoleMiddleware 中的routes 免受特定用户的攻击?
例如,我有一个路由create-case,它只能由operator 或Admin 访问,否则每个人都会重定向到404 error 我如何在RoleMiddleware 中处理它。
我已经编写了用于身份验证的基本代码,其中每个具有其角色的用户都经过身份验证,但我知道如何在中间件中编码,所以当用户点击它时,路由可能会转到 RoleMiddleware,其中中间件 Authenticate 路由到角色,然后给他访问权限。
角色中间件
class RoleMiddleware
{
public function handle($request, Closure $next, $permission = null)
{
if (Auth::check() === false)
{
return redirect('login');
}
elseif (Auth::check() === true)
{
$roles = Role::all()->pluck('slug');
if (is_null($request->user()) )
{
abort(404);
}
if (!$request->user()->hasRole($roles))
{
abort(404);
}
if ($request->user())
{
if ($request->user()->hasRole($roles))
{
return $next($request);
}
}
}
}
}
案件负责人:
<?php
namespace App\Http\Controllers\Cases;
use App\Http\Controllers\Controller;
use App\Http\Requests\CaseStoreRequest;
use Illuminate\Support\Facades\Auth;
use Session;
class CaseController extends Controller
{
use DropzoneFileUploadTraits;
public function __construct()
{
$this->middleware('role');
}
public function index()
{
$data['portal'] = Portal::all();
$data['operators'] = Operator::all();
return view('case', $data);
}
public function caseList()
{
$user = new User();
$isAdmin = $user->isAdmin();
$loggedIn = Auth::id();
$cases = Cases::with('patients', 'portal')
->when(!$isAdmin, function ($query) use ($loggedIn) {
return $query->where('user_id', $loggedIn);
})->orderBy('created_at', 'desc')->get();
$data['cases'] = $cases;
return view('case_list', $data);
}
}
路线:
Route::get('create-case', 'Cases\CaseController@index')->name('create-case');
Route::post('case-submit', 'Cases\CaseController@caseSubmit')->name('case-submit');
Route::post('edit-patient-case-submit', 'Cases\CaseController@editPatientCaseSubmit')->name('edit-patient-case-submit');
Route::get('case-list', 'Cases\CaseController@caseList')->name('case-list');
【问题讨论】:
标签: php laravel middleware