@tarunn You’re storing your users in one table, which is good. If you’re using Entrust to assign users roles, then you can create some middleware classes that restricts routes to users with certain roles:
Route::group(['middleware' => ['role:admin']], function () {
// Admin-only routes
});
Route::group(['middleware' => ['role:service_provider']], function () {
// Service provider-only roles
});
Route::group(['middleware' => ['role:customer']], function () {
// Customer-only roles
});
In your middleware class, check the role on the current user and either pass the request on, or abort if they don’t have the required role:
class VerifyUserHasRole
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string $role
* @return mixed
*/
public function handle($request, Closure $next, $role)
{
if ($request->user()->hasRole($role)) {
return $next($request);
}
// Throw “Forbidden” exception. User does not have required role.
abort(403);
}
}
Make sure to add the middleware class to your app/Http/Kernel.php file:
protected $routeMiddleware = [
// Existing middleware
'role' => \App\Http\Middleware\VerifyUserHasRole::class,
];