【发布时间】:2019-01-27 12:02:54
【问题描述】:
我正在使用 laravel 5.5,我正在为用户开发 基于角色的身份验证。 系统用户可以有多个角色,这些角色可以访问多个菜单。 我想检查用户的当前角色是否可以访问特定菜单。
下面是我的表结构
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
$table->dateTime('deleted_at')->nullable();
});
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->longText('description')->nullable();
$table->timestamps();
$table->dateTime('deleted_at')->nullable();
});
Schema::create('role_user', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id');
$table->integer('role_id');
$table->integer('is_default')->default(0);
$table->timestamps();
$table->dateTime('deleted_at')->nullable();
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
$table->foreign('role_id')
->references('id')->on('roles')
->onDelete('cascade');
});
Schema::create('menus', function (Blueprint $table) {
$table->increments('id');
$table->integer('parent_id');
$table->string('name')->unique();
$table->string('action')->unique();
$table->integer('sequence');
$table->timestamps();
$table->dateTime('deleted_at')->nullable();
});
Schema::create('menu_roles', function (Blueprint $table) {
$table->increments('id');
$table->integer('menu_id');
$table->integer('role_id');
$table->timestamps();
$table->dateTime('deleted_at')->nullable();
$table->foreign('menu_id')
->references('id')->on('menus')
->onDelete('cascade');
$table->foreign('role_id')
->references('id')->on('roles')
->onDelete('cascade');
});
我定义的关系如下:
用户.php
public function roles()
{
return $this->belongsToMany(Role::class);
}
角色.php
public function users()
{
return $this->belongsToMany(User::class);
}
public function menus()
{
return $this->belongsToMany(Menu::class);
}
如何检查特定角色是否可以访问特定菜单?
提前致谢
【问题讨论】:
-
@Erubiel 我添加了菜单和 menu_role 架构。请检查
-
我复制并修改了我以前的代码......它是相同的模式,但有一个权限表......也许有些 id 或表是错误的,但主要的一般想法是有效的。
标签: laravel laravel-5.5