Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Orgil's avatar
Level 2

Using middleware as role

I'm newbie in Laravel. I'm developing School Management System in Laravel.I made user role as follows

Is that okey ? using custom middlware for role ? Is there any better approuch ?

Route::group(['middleware' => ['web']], function()
{
    Route::auth();

    /*
    *******************************
    *   Routes for education system
    ******************************* 
    */

    // Route for only Sysadmins
    Route::get('edu/user/sysadmin', function()
    {
        return view('edu.user.sysadmin');   
    })->middleware('isSystemAdmin');

    

    /*********************
    *   Route for Admin
    **********************/
    Route::group(['middleware' => ['isAdmin']], function()
    {
        Route::get('edu/user/admin', function()
        {
            return view('edu.user.admin');
        });

        
        /************************
        *   Route for Students
        *************************/
        Route::get('edu/user/admin/students', 'AdminController@students');
    
        
        /***************************
        *   Route for School Setup
        ****************************/
        Route::get('edu/user/admin/calendar', 'AdminController@calendar');

        // Grade level
        Route::get('edu/user/admin/grade_level', 'AdminController@grade_level');

        // Announcement
        Route::get('edu/user/admin/announcement', 'AdminController@announcement');
    });
    


    // Routes for only Teachers
    Route::get('edu/user/teacher', function()
    {
        return view('edu.user.teacher');
    })->middleware('isTeacher');

    // Routes for only Parents
    Route::get('edu/user/parent', function()
    {
        return view('edu.user.parent');
    })->middleware('isParent');

    // Routes for only Students
    Route::get('edu/user/student', function()
    {
        return view('edu.user.student');
    })->middleware('isStudent');

});

Thanks in advance!

0 likes
5 replies
ChristophAust's avatar

Looks good if you are not going to add a lot more routes, if you ask me.

ricardovigatti's avatar

Maybe you want to put those specific routes inside groups, like you did for "admins".

martinbean's avatar
Level 80

@orgil It’s fine to use middleware to restrict access to resources, but as @ricardovigatti says you might want to group these routes:

Route::auth();

Route::group(['middleware' => ['auth', 'admin']], function () {
    // Admin-only routes
});

Route::group(['middleware' => ['auth', 'teacher']], function () {
    // Teacher-only routes
});

Route::group(['middleware' => ['auth', 'student']], function () {
    // Student-only routes
});
m_elmokhtar's avatar

If you are gone have many routes and probably many roles I would recommend trying the I would recommend you take a look at https://github.com/romanbican/roles It is a powerful package for roles and permissions I use all the time

Orgil's avatar
Level 2

Thanks all your answers, I got the point.

Please or to participate in this conversation.