2017-01-01 4 views
0

проблемаLaravel 5.3 Защитные маршруты из пользователей имеют различные роли

Я ищу способ, чтобы защитить пользователей от подъездных путей, которые не принадлежат им, например, администратор не может получить доступ к пользовательской области и простой пользователь не может получить доступ админку

Привет, я имею в Laravel 5.3 приложения и имеет два типа пользователей

  1. админ
  2. Простой пользовательский

я пытаюсь предотвратить admin доступ simple user маршрутов и наоборот, я ищу много и нашел одно решение о создании промежуточного программного

, что я сделал

<?php 

namespace App\Http\Middleware; 

use Auth; 

use Closure; 

class UserRole 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if (Auth::check()) // user logged 
     { 
      $request_url = $request->getRequestUri(); 
      if(Auth::user()->user_type == 1) // simple user 
      { 
       // checking if simple user is visiting routes    // starts with /user in the url 
       if (strpos($request_url, "/user") === 0) 
       { 
        return $next($request); 
       } 
       else 
       { 
        return redirect('/'); 
       } 
      } 
      // checking if admin is visiting routes     // starts with /admin in the url 
      else if(Auth::user()->user_type == 2) // admin 
      { 
       if (strpos($request_url, "/admin") === 0) 
       { 
        return $next($request); 
       } 
       else 
       { 
        return redirect('/'); 
       } 
      } 
      else 
      { 
       return redirect('/'); 
      } 
     } 
     return redirect('/'); 
    } 
} 

, к сожалению, оба имеют доступ к другим ограниченным областям. Я не могу найти лучший способ защитить пользователя от доступа к маршрутам, к которым у них тоже нет доступа.

ответ

0

Если вы хотите, чтобы выполнить это с помощью промежуточного программного вам нужно сделать следующее -

  1. Создать два, один промежуточное программное для администратора и один для простого пользователя.

  2. Затем создайте два маршрут группы в маршрутах файл т.е. routes/web.php

  3. Защитить один маршрут группы с администратором промежуточного слоя, и поместить все ваш администратор связанных маршрутов в этой группе. Защитить другой маршрут группы с простого потребителя промежуточного слоя и поместить все ваши связанные администратора маршрутов в этой группе.

Route::group(['middleware' => ['auth', 'admin']], function() { 
    // put all your admin routes here 
}); 

Route::group(['middleware' => ['auth', 'simple-user']], function() { 
    // put all your simple user routes here 
}); 

Вы также можете выполнить это с помощью роли и разрешения. Вот пакет, который может удовлетворить ваши потребности.

https://packagist.org/packages/zizaco/entrust

Смежные вопросы