2016-03-08 5 views
0

В целях обучения я хочу использовать динамические роли пользователей в своем приложении. Например, супер администратор может создавать новых пользователей, а также создавать новые роли и назначать роли пользователям. Сейчас я придумал следующее:Laravel динамически назначает роли пользователей

Маршруты:

Route::group(['middleware' => ['admin:4']], function() 
{ 
    Route::get('/admin', '[email protected]'); 
}); 

Route::group(['middleware' => ['admin:9']], function() 
{ 
    Route::get('/admin/users', '[email protected]'); 
}); 

В этом примере, целое число является роль пользователя. 9 будет самым высоким. Проверьте мои межплатформенный:

Администратора межплатформенный:

public function handle($request, Closure $next, $role) 
{ 
    if ($request->user()->role >= $role) 
    { 
     return $next($request); 
    } 

    return redirect('home'); 
} 

Проверяется, если пользователь имеет роль «4» или выше, при желании получить доступ к /admin маршрута. Если это так, у них есть доступ, если нет, они вернутся к /home.

Вышеупомянутые работы, но главная проблема заключается в том, что роли пользователя жестко закодированы в моих маршрутах. Есть ли способ передать параметры для промежуточного программного обеспечения динамически? Если да, это все, что мне нужно. Поэтому любые указатели были бы полезны.

PS. Я проверил еще один вариант, который, я думаю, будет лучше, но не уверен. Также используйте таблицу ролей рядом с сводной таблицей, а затем назначьте различные роли пользователю. Поэтому я мог бы, например, использовать поле множественного выбора, чтобы назначать разные роли одному пользователю. И затем в моем промежуточном программном обеспечении проверьте, имеет ли этот конкретный пользователь роль, необходимую для доступа к этой конкретной странице. Тем не менее, такая же проблема, как бы я мог динамически проверять свое промежуточное ПО, какую роль нужно для конкретной страницы? В моем разделе admin я хочу иметь возможность назначать разные роли для каждой страницы. Есть предположения?

+0

вместо жесткого кодирования числа ролей, просто извлечь их из БДА (использование кэширования для производительности), и чем проверка против правила пользователя –

+0

я на самом деле просто подумал о том, что да, я не сделал много с промежуточным слоем еще не так я не был» я уверен, как это сделать, но это довольно просто. Спасибо за ваш комментарий :) – Hardist

+1

Middleware будет работать, но вы также должны проверить это, если используете Laravel 5.1+ https://laravel.com/docs/5.1/authorization –

ответ

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