У меня есть несколько пользователей с несколькими разрешениями. Пользователь может принадлежать только к одной роли, но эта роль может иметь несколько разрешений, таких как create
, read
, update
, delete
. И у меня есть RoleMiddleware
. Я аутентифицирую пользователя в roleMiddleware
. Но как я могу защитить routes
в RoleMiddleware
от определенного пользователя c?
Например, у меня есть маршрут create-case
, доступ к которому возможен только с помощью operator
или Admin
иначе все перенаправляют на 404 error
как я могу справиться с этим в RoleMiddleware
.
Я написал базовый c код для аутентификации, где каждый пользователь со своими ролями проходит аутентификацию, но я получаю, как я могу код в промежуточном программном обеспечении, поэтому любой маршрут, когда пользователь нажимает его, может go к 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');