在 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后台,未登录的情况下该页面会重定向到登录页面:

voyager-login

用填充类database/seeds/UsersTableSeeder.php中设置的邮箱和密码进行登录,登录成功后会跳转到一个异常页面,这是因为Voyager路由中使用了中间件admin.user,该中间件中使用的用户实例是TCG\Voyager\Models\User,该模型类中使用的角色与用户对应关系表是Voyager提供的user_roles,而我们在之前的安装过程中将这个数据表迁移文件删除了,取而代之的,我们使用的是Entrust提供的role_user表,所以这里我们需要将用户实例修改为App\User,这样就能正常访问http://academycms.dev/admin了:

voyager-admin

接下来我们主要的文章都要做在Roles这个菜单(http://academycms.dev/admin/roles)里面:

voyager-roles

我们将会在下一节实现角色(Role)和权限(Permission)的设置和分配。


Vote Vote Cancel Collect Collect Cancel

<< 上一篇: 基于 access_token 的多用户多应用 API 认证 Laravel 开发包

>> 下一篇: PHP -Casbin: 支持 ACL、RBAC、ABAC 多种模型的 PHP 权限管理框架