Php 具有多个角色的Laravel身份验证
嗨,我是一个在拉威尔的初学者,我必须开发一个人力资源管理项目,我有两个角色管理员和员工。我在laracast学习了一个教程来构建角色和能力表,一切似乎都正常。现在我刚刚安装了laravel/ui包,我可以看到登录和注册,这与我在数据库中注册的用户配合得很好。我现在的问题是我不知道如何把事情联系起来。如何检查登录用户是否为管理员,以便打开管理员面板。等待您的答复。这是代码; 我收到的错误:419页过期 这是我尝试过的,但不起作用Php 具有多个角色的Laravel身份验证,php,laravel,authentication,laravel-7,Php,Laravel,Authentication,Laravel 7,嗨,我是一个在拉威尔的初学者,我必须开发一个人力资源管理项目,我有两个角色管理员和员工。我在laracast学习了一个教程来构建角色和能力表,一切似乎都正常。现在我刚刚安装了laravel/ui包,我可以看到登录和注册,这与我在数据库中注册的用户配合得很好。我现在的问题是我不知道如何把事情联系起来。如何检查登录用户是否为管理员,以便打开管理员面板。等待您的答复。这是代码; 我收到的错误:419页过期 这是我尝试过的,但不起作用 protected function authenticated(R
protected function authenticated(Request $request, $user)
{
// to admin dashboard
if(auth()->user()->roles()->name === 'admin') {
return redirect(route('admin'));
}
// to user dashboard
else if(auth()->user()-roles()->name === 'user') {
return redirect(route('home'));
}
abort(404);
}
路线
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Route::get('/admin', 'LoginController@authenticated')->name('admin');
用户表
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
创建角色表
class CreateRolesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('label')->nullable();
$table->timestamps();
});
Schema::create('abilities', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('label')->nullable();
$table->timestamps();
});
Schema::create('ability_role', function (Blueprint $table) {
$table->primary(['role_id','ability_id']);
$table->unsignedBigInteger('role_id');
$table->unsignedBigInteger('ability_id');
$table->timestamps();
$table->foreign('role_id')
->references('id')
->on('roles')
->onDelete('cascade');
$table->foreign('ability_id')
->references('id')
->on('roles')
->onDelete('cascade');
});
Schema::create('role_user', function (Blueprint $table) {
$table->primary(['user_id','role_id']);
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('role_id');
$table->timestamps();
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
$table->foreign('role_id')
->references('id')
->on('roles')
->onDelete('cascade');
});
}
User.php
public function roles()
{
if(is_string($role))
{
$role = Role::whereName($role)->firstOrFail();
}
return $this->belongsToMany(Role::class)->withTimestamps();
}
public function assignRole($role)
{
$this->roles()->sync($role, false);
}
public function abilities($role)
{
return $this->roles->map->abilities->flatten()->pluck('name')->unique();
}
Role.php
class Role extends Model
{
protected $guarded = [];
public function abilities()
{
return $this->belongsToMany(Ability::class)->withTimestamps();
}
public function allowTo($ability)
{
$this->abilities()->sync($ability,false);
}
}
Ability.php
{
protected $guarded = [];
public function roles()
{
if(is_string($ability))
{
$ability = Ability::whereName($ability)->firstOrFail();
}
return $this->belongsToMany(Role::class)->withTimestamps();
}
}
我也是拉威尔的初学者。最难的是学习新事物。所以我选择使用他们做得好的东西。 管理我正在使用的角色和权限
"santigarcor/laratrust"
您可以在此处了解更多信息:
您可以这样使用它:
use Illuminate\Support\Facades\Auth;
if (Auth::user()->isAbleTo('edit-user')) {}
if (Auth::user()->hasRole('admin')) {}
if (Auth::user()->isA('guide')) {}
if (Auth::user()->isAn('admin')) {}
该软件包为santigarcor/laratrust软件包提供用户界面
"icweb/trusty"
您可以在此处了解更多信息:
所有表格和数据都将自动创建
我希望这能帮助你 我也是拉威尔的初学者。最难的是学习新事物。所以我选择使用他们做得好的东西。 管理我正在使用的角色和权限
"santigarcor/laratrust"
您可以在此处了解更多信息:
您可以这样使用它:
use Illuminate\Support\Facades\Auth;
if (Auth::user()->isAbleTo('edit-user')) {}
if (Auth::user()->hasRole('admin')) {}
if (Auth::user()->isA('guide')) {}
if (Auth::user()->isAn('admin')) {}
该软件包为santigarcor/laratrust软件包提供用户界面
"icweb/trusty"
您可以在此处了解更多信息:
所有表格和数据都将自动创建
我希望这能帮助你 欢迎来到苏。。。我不明白具体的问题是什么。。。您似乎正在检查登录后运行的
authenticated
方法中的角色。。。。此外,除了return
语句之外,所有内容都应该从模型上的角色
方法中删除。我不知道,但我收到一个错误419当我以管理员用户身份登录时,我似乎无法访问管理员视图419是一个CSRF令牌问题。。。你能提供你的路线吗?由于引发异常,您甚至无法使用authenticated
方法。。。如果您确实使用了该方法,您可能会遇到有关角色方法不存在的错误No im使用来自软件包的登录是的,我现在将发布路由欢迎访问SO。。。我不明白具体的问题是什么。。。您似乎正在检查登录后运行的authenticated
方法中的角色。。。。此外,除了return
语句之外,所有内容都应该从模型上的角色
方法中删除。我不知道,但我收到一个错误419当我以管理员用户身份登录时,我似乎无法访问管理员视图419是一个CSRF令牌问题。。。你能提供你的路线吗?由于引发异常,您甚至无法使用authenticated
方法。。。如果您使用了该方法,您可能会遇到有关角色方法不存在的错误No im使用来自软件包的登录是的,我现在将发布路由。这应该通过使用代码来完成,但无论如何,谢谢:)我已经尝试了很多方法来找到最佳解决方案,请尝试一下。你会发现这是最简单的方法。祝你好运!嘿,这应该通过使用代码来完成,但无论如何,谢谢:)我已经尝试了很多方法来找到最好的解决方案,只要尝试一下。你会发现这是最简单的方法。祝你好运!