Új hozzászólás Aktív témák

  • Neil Watts

    veterán

    Sziasztok!

    Laravelben igencsak kezdo vagyok, igy nezzetek el nekem ha marhasagot kerdezek/irok.
    Projektemet Laravel 8/Jetstream/Laratrust komboval fejlesztem, es az RBAC megvalositasa kozben akadtam meg:

    A CreateNewUser.php-t igy modositottam:

    $user = User::create([
               'username' => $input['username'],
                'email' => $input['email'],
                'password' => Hash::make($input['password']),
            ]);
            $user->attachRole('visitor');
            return $user;

    Lathato, hogy a jogot hozzaadja. Regisztracio utan a beepitett email kuldo automatizmussal egy megerosito emailt kuldok. Amikor rakattintok az emailben levo linkre, akkor a /dashboard-ra kerulok.

    Aztan itt, a Profile-ban meg kell adnom tovabbi adataimat (migration-be raktam oket).

    A UpdateUserProfileInformation vonatkozo sorai:

    if ($input['email'] !== $user->email &&
                $user instanceof MustVerifyEmail) {
                $this->updateVerifiedUser($user, $input);
            } else {
                if ($user->first_login === false) {
                    $user->forceFill([
                        'first_login' => true,
                    ])->save();
                }
    es

    $user->forceFill([
                    'firstname' => $input['firstname'],
                    'middlename' => $input['middlename'],
                    'lastname' => $input['lastname'],
                    'username' => $input['username'],
                    'email' => $input['email'],
                    'landlinetel' => $input['landlinetel'],
                    'mobiletel' => $input['mobiletel'],
                    'mandatory_fields_filled' => true,
                ])->save();
                Auth::logout();
                Session::flush();
                redirect(route('login'));

    Elmeletileg (ill. a dokumentacio alapjan is ugy tunik, hogy ezt igy illik csinalni errefele, illetve SO-n, meg egyeb forumokon is ezt talaltam: Az auth logout kijelentkeztet, utana eldobom/lezarom a session-t, hogy ne lehessen vele visszaelni, majd atiranyitok.

    LoginResponse.php:

    public function toResponse($request)
        {
            $user = auth()->user();
            if ($user->mandatory_fields_filled && $user->hasRole('admin')) {
                $home = '/admin';
                return redirect()->intended($home);
            } elseif ($user->mandatory_fields_filled && $user->hasRole('user')) {
                $home = '/user';
                return redirect()->intended($home);
            } elseif ($user->hasRole('visitor')) {
                if ($user->mandatory_fields_filled) {
                    $user->detachRole('visitor');
                    $user->attachRole('user');
                }
                $home = '/dashboard';
                return redirect()->intended($home);
            } else {
                $home = '/';
                return redirect()->intended($home);
            }
        }

    Ha atirom a user_role-ban bejelentkezes elott a felhasznalohoz tartozo jogot (mondjuk visitorrol userre) akkor a bejelentkezesnel a /userre redirectel (ami 404, mivel meg nincs kesz), am ha nyomok egy visszat a bongeszoben, akkor a korabban bejelentkezett user sessionjebe dob vissza. :Y Van Laravelnel erre valami szep megoldas, amivel normalisan meg lehet csinalni a bejelentkezeskori hitelesitest?

    Eletem elso Laravel-es tanulo projektje ez, ugyhogy kerlek ne lojetek. :B

    Koszi!

    Udv.

Új hozzászólás Aktív témák