Как правильно использовать в Laravel типы пользователей с разными уровнями доступа? - PullRequest
0 голосов
/ 06 ноября 2019

Изначально в моем проекте было 3 типа пользователей

  • superadmin
  • admin
  • user

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

В настоящее время я настроил типы следующим образом: в пользовательской таблице у меня есть внешний ключ user_type_id, который ссылается на таблицу user_types, где будут 4 типа.

В моей модели пользователя

public function userTypes()
{
    return $this->belongsTo(UserType::class);
}

public function hasRole($id)
{
    return $this->user_type_id == $id;
}

public function isSuperAdmin()
{
    return $this->hasRole(UserType::SUPER_ADMIN);
}

public function isAdmin()
{
    return $this->hasRole(UserType::ADMIN);
}

public function isDirector()
{
    return $this->hasRole(UserType::DIRECTOR);
}

public function isUser()
{
    return $this->hasRole(UserType::USER);
}

Модель UserType

public static $SUPER_ADMIN = 1;
public static $ADMIN = 2;
public static $DIRECTOR = 3;
public static $USER = 4;

public $timestamps = false;

protected $fillable = ['name'];
public const SUPER_ADMIN = 1;
public const ADMIN = 2;
public const DIRECTOR = 3;
public const USER = 4;

Я использую Inertia для настройки разрешений, эти разрешения в основном являются пунктами меню, которые видны для каждого конкретного типа пользователя, это вAppServiceProvider.php

Inertia::version(function () {
    return md5_file(public_path('mix-manifest.json'));
});
    Inertia::share('auth.user', function () {
        $auth = null;
        if (Auth::user()) {
            $perms = [];
            $user = Auth::user();

            if ($user->isSuperAdmin()) {
                $perms = [
                    //permissions here
                ];
            }
            if ($user->isAdmin()) {
                $perms = [
                    //permissions here
                ];
            }
            if ($user->isDirector()) {
                $perms = [
                    //permissions here
                ];
            }
            if ($user->isUser()) {
                $perms = [
                    //permissions here
                ];
            }
        }
    });

Для промежуточного программного обеспечения у меня это для SuperAdminMiddleware

public function handle($request, Closure $next)
{
    $user = Auth::user();
    if (auth()->check() && $user->isSuperAdmin()) {
        return $next($request);
    }
    return redirect('/');
}

AdminMiddleware

public function handle($request, Closure $next)
{
    $user = Auth::user();
    if (auth()->check() && $user->isAdmin() || $user->isSuperAdmin()) {
        return $next($request);
    }
    return redirect('/');
}

Мои маршруты вweb.php

//Auth and login routes
Route::group(['middleware' => 'auth'], function () {
    Route::resource('/', 'DashController');
    Route::get('/logout')->name('logout')->uses('Auth\LoginController@logout');
    Route::group(['middleware' => 'App\Http\Middleware\AdminMiddleware'], function () {

        //All the routes are in this group
    });

});

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...