0、安装Entrust
Entrust是一个Laravel扩展包,用于在Laravel应用中实现RBAC(Role-Based Access Control)权限管理,关于该扩展包的安装及使用请参考学院之前提供的两篇教程:
本教程主要是Entrust的实战篇,我们将会把该扩展包集成到Voyager,用于为后台提供权限管理功能。
1、安装Voyager
Voyager是一个Laravel后台管理扩展包,关于其介绍请参考: http://laravelacademy.org/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' => '管理员', 'descript ion' => '具备管理员权限', 'created_at' => '2016-10-21 22:31:20', 'updated_at' => '2016-10-21 22:31:20', ], 1 => [ 'id' => 2, 'name' => 'member', 'display_name' => '普通会员', 'descript ion' => '普通注册会员', '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)的设置和分配。