Php 用户注册时,Laravel Breeze和Spatial权限设置角色
我正在使用LaravelBreeze作为一个Auth脚手架包,以及Spatiale的LaravelPermissions。我已经创建了两个注册表单,一个用于“学生”,另一个用于“教师”。所有注册视图都位于RegisteredUserController中 app\Http\Controllers\Auth\RegisteredUserController.phpPhp 用户注册时,Laravel Breeze和Spatial权限设置角色,php,laravel,laravel-8,spatie,Php,Laravel,Laravel 8,Spatie,我正在使用LaravelBreeze作为一个Auth脚手架包,以及Spatiale的LaravelPermissions。我已经创建了两个注册表单,一个用于“学生”,另一个用于“教师”。所有注册视图都位于RegisteredUserController中 app\Http\Controllers\Auth\RegisteredUserController.php <?php namespace App\Http\Controllers\Auth; use App\Http\Contro
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\Frontend\User;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class RegisteredUserController extends Controller
{
/**
* Display the registration view for student.
*
* @return \Illuminate\View\View
*/
public function createSudent()
{
return view('auth.student.student-space');
}
/**
* Display the registration view for teacher.
*
* @return \Illuminate\View\View
*/
public function createTeacher()
{
return view('auth.teacher.teacher-space');
}
/**
* 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),
]));
// Create roles
$create_sponsor_role = Role::create(['name' => 'student']);
$create_project_role = Role::create(['name' => 'teacher']);
// Assigning roles
$user->assignRole(['student', 'teacher']);
// Check if it's correct roles
if($user()->hasRole('sponsor')) {
return redirect()->intended('/student/dashboard');
}
if ($user()->hasRole('project')) {
return redirect()->intended('/teacher/dashboard');
}
else {
return redirect('/signin');
}
event(new Registered($user));
}
}
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Auth\RegisteredUserController;
Route::get('/student-space', [RegisteredUserController::class, 'createStudent'])->middleware('guest')->name('student-space');
Route::get('/teacher-space', [RegisteredUserController::class, 'createTeacher'])->middleware('guest')->name('teacher-space');
这里我为您介绍一个简单的设置:
播种你的角色
如果您使用的是Spatial laravel权限。首先,您需要在数据库中有一些角色。可以通过编写crud并在管理面板中对其进行控制或将其植入数据库中来实现。我在这里为它写种子
对于您的案例,我创建了两个角色:编写者和发布者:
通过运行php artisan make:seeder RoleTableSeeder创建RoleTableSeeder播种机
在Database\Seeders\DatabaseTableSeeder中调用播种器,如下所示:
在播种机中编写角色,如下所示:
通过调用php artisan db:seed运行播种机
注册用户并提供角色
您应该像在问题中所做的那样,将用户引导到正确的视图刀片。
角色创建后必须分配给用户。在这里,你需要一个逻辑来区分它是作家还是出版商?我建议在表单中为角色添加一个隐藏的输入。如果为true,您可以指定例如writer角色,并根据需要使用required\u(如果此处解释了方法)创建一些字段
您应该在创建后给用户一个角色
use Illuminate\Validation\Rule;
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'custom_field' => [Rule::requiredIf($request->role)],
'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),
]));
$role = $request->get('role')
? Spatie\Permission\Models\Role::findByName('writer')
: Spatie\Permission\Models\Role::findByName('publisher');
$user->assignRole($role);
event(new Registered($user));
return redirect(RouteServiceProvider::HOME);
}
在此,我将为您介绍一个简单的设置:
播种你的角色
如果您使用的是Spatial laravel权限。首先,您需要在数据库中有一些角色。可以通过编写crud并在管理面板中对其进行控制或将其植入数据库中来实现。我在这里为它写种子
对于您的案例,我创建了两个角色:编写者和发布者:
通过运行php artisan make:seeder RoleTableSeeder创建RoleTableSeeder播种机
在Database\Seeders\DatabaseTableSeeder中调用播种器,如下所示:
在播种机中编写角色,如下所示:
通过调用php artisan db:seed运行播种机
注册用户并提供角色
您应该像在问题中所做的那样,将用户引导到正确的视图刀片。
角色创建后必须分配给用户。在这里,你需要一个逻辑来区分它是作家还是出版商?我建议在表单中为角色添加一个隐藏的输入。如果为true,您可以指定例如writer角色,并根据需要使用required\u(如果此处解释了方法)创建一些字段
您应该在创建后给用户一个角色
use Illuminate\Validation\Rule;
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'custom_field' => [Rule::requiredIf($request->role)],
'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),
]));
$role = $request->get('role')
? Spatie\Permission\Models\Role::findByName('writer')
: Spatie\Permission\Models\Role::findByName('publisher');
$user->assignRole($role);
event(new Registered($user));
return redirect(RouteServiceProvider::HOME);
}
错误类“App\Models\Role”在将帐户注册为“Writer”后未找到。我不想使用数据库中的种子。我想使用注册表创建自己的凭据使用空间角色类。我已经更新了答案。您应该将角色添加到数据库中。通过种子设定或其他您喜欢的方式感谢您的帮助,但返回重定向(RouteServiceProvider::HOME);这仅适用于“Writer”而非“Publisher”的一个注册表单错误类“App\Models\Role”在注册帐户为“Writer”后未找到我不想使用数据库种子我想使用注册表单创建我自己的凭据使用空间角色类。我已经更新了答案。您应该将角色添加到数据库中。通过种子设定或其他您喜欢的方式感谢您的帮助,但返回重定向(RouteServiceProvider::HOME);“作者”而非“出版商”只能填写一份登记表你不应该在每个注册请求上创建角色我花了两天时间试图解决这个问题,但没有任何效果我希望有人能帮助我你不应该在每个注册请求上创建角色我花了两天时间试图解决这个问题,但没有任何效果我希望有人能帮助我
use Illuminate\Validation\Rule;
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'custom_field' => [Rule::requiredIf($request->role)],
'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),
]));
$role = $request->get('role')
? Spatie\Permission\Models\Role::findByName('writer')
: Spatie\Permission\Models\Role::findByName('publisher');
$user->assignRole($role);
event(new Registered($user));
return redirect(RouteServiceProvider::HOME);
}