2016-07-04 1 views
0

Я пытаюсь создать интернет-сайт магазина с помощью Laravel рамкидва аутентификации пользователей в одной таблице в Laravel 5,2

У меня есть таблица с этими колонками: id, username, password, division_id

где division_id относится к таблице, называемой division с: id, division_type

и у меня есть два division type: Admin и Customers

Я пытаясь разделить разрешение на доступ к определенному числу страниц на основе их division_id, таких как администратор, может получить доступ к панели администратора, но не к клиенту, а клиент может получить доступ к панели клиента, например, к странице заказа продукта, но не к администратору.

Оба типа могут делать почти все на своих доступных страницах, а на моих основных страницах будут панели администратора, панель клиентов и основной сайт.

Как я могу сделать это в своем проекте, используя только одну таблицу и группу среднего класса?

P.S. Я новичок в этом форуме

+0

Каков сценарий взаимоотношений? 1 пользователь принадлежит только к одному подразделению? или 1 пользователь принадлежит многим? –

+0

Один пользователь принадлежит к одному подразделению, у одного подразделения есть много пользователей. – Orange

+0

правильный путь должен иметь два групповых маршрута с промежуточным программным обеспечением, для администратора и клиента – xmhafiz

ответ

0

Для этого промежуточного программного обеспечения вам просто нужно проверить, нужен ли division для просмотра сайта, такой же, как у division, к которому принадлежит пользователь. В функции handle, вы можете пройти 3-й аргумент, который представляет собой название отдела, такие как customer

При добавлении Middleware к вашим маршрутам, вы можете передать имя разделения в качестве аргумента функции handle как так :

'middleware' => ['division:customer'] 

Реализация этого в Route Group может выглядеть примерно так:

Route::group(['prefix' => 'customer', 'middleware' => ['division:customer']], funtion(){ 
    //route definitions for all these routes will require a "division" type of "customer" 
}); 

Или вы могли бы применить его для маршрутизации ресурсов длямаршрутизации:

Route::resource('customer', 'CustomerController')->middleware(['divison:customer']); 

Или вы можете просто применить его к определенному маршруту:

Route::get('customer/{id}', '[email protected]')->middleware(['division:customer']); 

В вашей handle функции вы можете получить доступ к этому значению как 3-й аргумент:

public function handle($request, Closure $next, Division $division) 

Для упростить процесс автоматического решения проблемы с помощью чего-то другого, кроме первичного ключа, мы продолжим и открываем наш App\Providers\RouteServiceProvider и добавьте волшебство внутри функции boot.

public function boot(Router $router) 
{ 
    parent::boot($router); 

    $router->bind('division', function($value) { 
     return Division::where(function($query) use($value){ 
      if (is_int($value)) { 
       return $query->where('id', $value)->first(); 
      } else { 
       return $query->where('type', ucfirst($value))->first(); 
      } 

      return null; 
     }); 
    }); 

Теперь вернемся к Middleware, можно легко сделать сравнение с $division в нашей handle функции, и наш authorized пользователь.

if(app()->user()->division->type == $division->type) { 
    return $next($request); 
} 

abort(403, 'You are not authorized to view this page!'); 
+0

Как мы помещаем ''middleware' => ['division: customer']'? Не могли бы вы показать мне пример этой реализации в routes.php? – Orange

+0

@Orange Вы применили бы это к своим «Маршрутам». Скорее всего, вы хотите группу. Ответ обновлен. – Ohgodwhy

+0

Маршрут не найден. Можно ли передать параметр 'division' в исходное промежуточное ПО' auth', не создавая новое промежуточное ПО? – Orange

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

  • Нет связанных вопросов^_^