Laravel Spatie 权限 - 没有名为“学生”的角色

时间:2021-01-05 15:00:42

标签: php laravel permissions laravel-8 spatie

我正在将 Spatie 的 Laravel 权限包与 Laravel Breeze 一起使用。我为两种类型的用户创建了两个注册表单:“学生”和“教师”。当我以“学生”的身份创建帐户时,它会显示以下错误消息。

<块引用>

没有名为 student 的角色。

注册用户控制器

class RegisteredUserController extends Controller
{
    /**
     * Display the registration view for student.
     *
     * @return \Illuminate\View\View
     */
    public function createStudent()
    {
        $role = Role::create(['name' => 'student']);
        return view('auth.student.student-space', compact('student'));
    }
    
    /**
     * Display the registration view for instructor.
     *
     * @return \Illuminate\View\View
     */
    public function createInstructor()
    {
        $role = Role::create(['name' => 'instructor']);
        return view('auth.instructor.instructor-space', compact('role'));
    }

    /**
     * Handle an incoming registration request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|confirmed|min:8',
        ]);

        Auth::login($user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]));
        
        $user->assignRole('student', 'instructor');
        $user->save();
        
        // Check if the "Student" has the correct role
        
        if ($user->hasRole('student')) {
            return redirect()->intended('/student/dashboard');
        }
        
        // Check if the "Instructor" has the correct role
        
        if ($user->hasRole('instructor')) {
            return redirect()->intended('/instructor/dashboard');
        }
        
        event(new Registered($user));
    }
}

AuthenticatedSessionController

   public function store(LoginRequest $request)
    {
        $request->authenticate();

        $request->session()->regenerate();
        
        if(auth()->check() && auth()->user()->hasRole('student')) {
            return redirect()->intended('/student/dashboard');
        }
        
        if(auth()->check() && auth()->user()->hasRole('instructor')) {
            return redirect()->intended('/instructor/dashboard');
        }
        
        // return redirect(RouteServiceProvider::HOME);
    }

routes/auth.php

Route::get('/student-space',
    [RegisteredUserController::class, 'createStudent'])
    ->middleware('guest')->name('student-space');
Route::post('/student-space',
    [RegisteredUserController::class, 'store'])
    ->middleware('guest');
Route::get('/instructor-space',
    [RegisteredUserController::class, 'createInstructor'])
    ->middleware('guest')->name('instructor-space');
Route::post('/instructor-space',
    [RegisteredUserController::class, 'store'])
    ->middleware('guest');

0 个答案:

没有答案