在 Voyager 后台管理系统中集成 Entrust 实现 RBAC 权限管理(一) —— 安装
0、安装Entrust
Entrust是一个Laravel扩展包,用于在Laravel应用中实现RBAC(Role-Based Access Control)权限管理,关于该扩展包的安装及使用请参考学院之前提供的两篇教程:
本教程主要是Entrust的实战篇,我们将会把该扩展包集成到Voyager,用于为后台提供权限管理功能。1、安装Voyager
Voyager是一个Laravel后台管理扩展包,关于其介绍请参考:https://laravel.geekai.co/post/6401.html,由于Voyager也自带了角色功能,这会导致在执行安装命令(voyager:install)的时候报错(roles表重复),所以我们需要对Voyager的安装步骤作调整,将voyager:install
拆解成多个步骤。
如果还没有执行make:auth
的话,先运行这个命令快速生成用户认证所需文件和配置:
php artisan make:auth
发布Voyager所需前端资源文件、配置文件及数据库相关文件:
php artisan vendor:publish --provider=TCG\Voyager\VoyagerServiceProvider
php artisan vendor:publish --provider=Intervention\Image\ImageServiceProviderLaravel5
执行完这一步之后去database/migrations
目录下删除_create_user_roles_table.php
和_create_roles_table.php
,然后到database/seeds
目录下修改RolesTableSeeder.php
文件如下:
<?php
use Illuminate\Database\Seeder;
class RolesTableSeeder extends Seeder
{
/**
* Auto generated seed file.
*
* @return void
*/
public function run()
{
\DB::table('roles')->delete();
\DB::table('roles')->insert([
0 => [
'id' => 1,
'name' => 'admin',
'display_name' => '管理员',
'description' => '具备管理员权限',
'created_at' => '2016-10-21 22:31:20',
'updated_at' => '2016-10-21 22:31:20',
],
1 => [
'id' => 2,
'name' => 'member',
'display_name' => '普通会员',
'description' => '普通注册会员',
'created_at' => '2016-10-21 22:31:38',
'updated_at' => '2016-10-21 22:31:38',
],
]);
}
}
同时修改UserRolesTableSeeder.php
文件如下:
<?php
use Illuminate\Database\Seeder;
class UserRolesTableSeeder extends Seeder
{
/**
* Auto generated seed file.
*
* @return void
*/
public function run()
{
\DB::table('role_user')->delete();
\DB::table('role_user')->insert([
0 => [
'role_id' => 1,
'user_id' => 1,
],
1 => [
'role_id' => 2,
'user_id' => 1,
],
]);
}
}
相应的,我们修改下config/voyager.php
中的默认用户角色:
'user' => [
'add_default_role_on_register' => true,
'default_role' => 'member',
'namespace' => App\User::class,
],
这样,我们就可以放心大胆的运行数据库迁移命令创建Voyager的数据表了:
php artisan migrate
运行以下命令重新加载映射关系:
composer dump-autoload
接下来,我们来运行数据库填充命令造一些数据:
php artisan db:seed --class=VoyagerDatabaseSeeder
最后,我们为storage
目录生成软链接:
php artisan storage:link
至此,Voyager安装完毕。
2、集成Entrust
安装完成后,就可以通过http://academycms.dev/admin
访问Voyager后台,未登录的情况下该页面会重定向到登录页面:
用填充类database/seeds/UsersTableSeeder.php
中设置的邮箱和密码进行登录,登录成功后会跳转到一个异常页面,这是因为Voyager路由中使用了中间件admin.user
,该中间件中使用的用户实例是TCG\Voyager\Models\User
,该模型类中使用的角色与用户对应关系表是Voyager提供的user_roles
,而我们在之前的安装过程中将这个数据表迁移文件删除了,取而代之的,我们使用的是Entrust提供的role_user
表,所以这里我们需要将用户实例修改为App\User
,这样就能正常访问http://academycms.dev/admin
了:
接下来我们主要的文章都要做在Roles这个菜单(http://academycms.dev/admin/roles
)里面:
我们将会在下一节实现角色(Role)和权限(Permission)的设置和分配。
12 Comments