Проверьте, предоставляет ли какое-либо промежуточное ПО доступ в laravel - PullRequest
0 голосов
/ 03 августа 2020

У меня два типа пользовательских ролей. Админ и менеджер. Администратор может получить доступ ко всем маршрутам, но менеджер может получить доступ только к некоторым из них. Большинство моих маршрутов являются ресурсными. В настоящее время у меня есть эта группа маршрутов для администратора:

Route::middleware(['auth', 'admin'])->prefix('admin')->group(function () {
    Route::resource('post','PostController')
}

Вот мое промежуточное ПО 'admin', если вам нужно проверить:

if (!Auth::user()->isAdmin())
    {
        return redirect('/home');
    }
    return $next($request);

Здесь все маршруты доступны администратору . Но я хочу разрешить доступ к некоторым маршрутам, например post.index, post.show, post.edit, для менеджера. Что мне теперь делать?

Ниже я подробно объясняю свой вопрос с помощью примера

У меня есть три промежуточного программного обеспечения, auth, manager, admin. Как следует из названия, промежуточное ПО auth проверяет, аутентифицирован ли пользователь, manager промежуточное ПО проверяет, является ли пользователь менеджером, и, конечно же, промежуточное ПО admin проверяет, является ли пользователь администратором. Теперь для маршрута Route::resource('post','PostController')

  • auth имеет доступ к post.index, post.view
  • manager имеет доступ к post.index, post.view, post.edit
  • admin имеет доступ ко всем маршрутам. Как лучше всего применить промежуточное ПО для решения проблемы?

Ответы [ 2 ]

4 голосов
/ 03 августа 2020

Laravel позволяет использовать несколько маршрутов в ваших контроллерах

Выполните следующие действия:

Удалите промежуточное ПО 'admin' из группы маршрутов, оставив только 'auth' .

    Route::middleware(['auth'])->prefix('admin')->group(function()
    {
        Route::resource('post','PostController');
    }

В вашем 'менеджере. php' файл маршрута теперь вы можете использовать и указывать на тот же PostController

Route::middleware(['auth'])->prefix('manager')->group(function()
{
    Route::resource('post','PostController');
}

затем добавьте метод __construct () вверху PostController вот так

class PostController extends Controller
{
    public function __construct()
    {
        $this->middleware('admin')->except(['index', 'show', 'edit']);
        $this->middleware('manager');
    }
}
0 голосов
/ 03 августа 2020

Вы можете определить частичные маршруты ресурсов .

https://laravel.com/docs/7.x/controllers#restful -partial-resource-routes

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

Route::middleware(['auth'])->group(function(){
 Route::middleware(['admin'])->prefix('admin')->group(function () {
    Route::resource('post','PostController')->except([
    'index', 'show', 'edit'
     ]);
 }
 Route::middleware(['manager'])->prefix('manager')->group(function () {
  Route::resource('post','PostController')->only([
    'index', 'show', 'edit'
  ]);
 }
}
...