公海彩船

laravel装置权限治理

laravel是一款很是流行的php开发框架 ,它提供了许多便当的工具和组件 ,可以大大提高开发效率。在开发应用程序的历程中 ,许多时候需要进行用户权限治理。laravel提供了很是便当的权限治理功效 ,可以资助我们快速和宁静地实现权限控制。

本文将从以下几个方面介绍Laravel权限治理的装置和配置:

装置Laravel权限治理组件

数据库迁移

用户认证

角色和权限治理

中间件

路由;

一、装置Laravel权限治理组件

在Laravel中 ,我们可以通过composer装置spatie/laravel-permission组件来实现权限治理功效。我们可以在项目的根目录下执行以下命令来装置这个组件:

composer require spatie/laravel-permission

登录后复制

装置完成之后 ,我们需要在config/app.php文件中添加这个组件的效劳提供者:

'providers' => [
    // ...
    SpatiePermissionPermissionServiceProvider::class,
],

登录后复制

同时 ,在同一个文件中添加这个组件的门面:

'aliases' => [
    // ...
    'Permission' => SpatiePermissionFacadesPermission::class,
    'Role' => SpatiePermissionFacadesRole::class,
],

登录后复制

二、数据库迁移

在装置完组件以后 ,我们需要运行数据库迁移以创立权限相关的表。我们可以在使用artisan命令生成数据库迁移文件:

php artisan make:migration create_permission_tables

登录后复制

然后 ,翻开生成的迁移文件 ,添加以下代码:

class CreatePermissionTables extends Migration
{
    public function up()
    {
        Schema::create('permissions', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('guard_name');
            $table->timestamps();
        });

        Schema::create('roles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('guard_name');
            $table->timestamps();
        });

        Schema::create('model_has_roles', function (Blueprint $table) {
            $table->integer('role_id')->unsigned();
            $table->morphs('model');
            $table->string('model_type')->nullable();
            $table->string('guard_name');
            $table->foreign('role_id')->references('id')->on('roles')
                  ->onDelete('cascade');
            $table->primary(['role_id', 'model_id', 'model_type']);
        });

        Schema::create('model_has_permissions', function (Blueprint $table) {
            $table->integer('permission_id')->unsigned();
            $table->morphs('model');
            $table->string('model_type')->nullable();
            $table->string('guard_name');
            $table->foreign('permission_id')->references('id')->on('permissions')
                  ->onDelete('cascade');
            $table->primary(['permission_id', 'model_id', 'model_type']);
        });

        Schema::create('role_has_permissions', function (Blueprint $table) {
            $table->integer('permission_id')->unsigned();
            $table->integer('role_id')->unsigned();
            $table->string('guard_name');
            $table->foreign('permission_id')->references('id')->on('permissions')
                  ->onDelete('cascade');
            $table->foreign('role_id')->references('id')->on('roles')
                  ->onDelete('cascade');
            $table->primary(['permission_id', 'role_id']);
        });
    }

    public function down()
    {
        Schema::dropIfExists('permissions');
        Schema::dropIfExists('roles');
        Schema::dropIfExists('model_has_roles');
        Schema::dropIfExists('model_has_permissions');
        Schema::dropIfExists('role_has_permissions');
    }
}

登录后复制

然后 ,我们就可以运行迁移命令了:

php artisan migrate

登录后复制

这样 ,相关的表就会被创立到数据库中。

三、用户认证

接下来 ,我们需要在应用中实现用户认证功效。Laravel已经为我们提供了很便当的用户认证系统 ,我们只需要运行以下命令:

php artisan make:auth

登录后复制

这个命令会生成一个包括用户登录、注册、修改密码等功效的页面。我们可以通过这些操作来创立和治理用户。

四、角色和权限治理

在Laravel权限治理中 ,角色和权限是很是重要的看法。我们可以通过角色和权限来界说用户的会见控制规则。

创立角色

我们可以使用Role门面来创立角色。例如:

use SpatiePermissionModelsRole;

$role = Role::create(['name' => 'admin']);

登录后复制

上面的代码将创立一个名为“admin”的角色。

创立权限

同样的 ,我们可以使用Permission门面来创立权限:

use SpatiePermissionModelsPermission;

$permission = Permission::create(['name' => 'create posts']);

登录后复制

上面的代码将创立一个名为“create posts”的权限。

给角色授权

现在我们有了角色和权限 ,我们还需要将权限授予给角色。我们可以使用角色的givePermissionTo要领来完成:

$role = Role::findByName('admin');
$permission = Permission::findByName('create posts');
$role->givePermissionTo($permission);

登录后复制

检查用户是否具有权限

现在我们已经界说了角色和权限 ,我们可以使用Laravel权限治理提供的can要领来检查用户是否具有权限。例如:

$user->can('create posts');

登录后复制

上面的代码将返回一个布尔值 ,体现目今用户是否具有“create posts”权限。

检查用户是否具有角色

同样的 ,我们也可以使用hasRole要领来检查用户是否具有某个角色。例如:

$user->hasRole('admin');

登录后复制

上面的代码将返回一个布尔值 ,体现目今用户是否具有“admin”角色。

五、中间件

我们可以使用Laravel的中间件来;の颐堑穆酚珊涂刂破 ,从而实现权限控制。下面是示例代码:

Route::group([
    'middleware' => ['role:admin'],
], function () {
    Route::get('/admin', function () {
        //
    });
});

Route::group([
    'middleware' => ['permission:create posts'],
], function () {
    Route::get('/new-post', function () {
        //
    });
});

登录后复制

上面的代码将;ぁ/admin”和“/new-post”路由 ,只允许拥有“admin”角色和“create posts”权限的用户会见。

六、路由;

最后 ,我们需要;の颐堑穆酚珊涂刂破。我们可以使用can和authorize要领来实现。

public function store(Request $request)
{
    $this->authorize('create', Post::class);

    // ...
}

public function edit(Request $request, Post $post)
{
    if (! $request->user()->can('edit', $post)) {
        abort(403);
    }

    // ...
}

登录后复制

上面的代码将;tore和edit要领 ,只允许拥有“create”和“edit”的权限的用户会见。

总结

总的来说 ,Laravel的权限治理很是便当和宁静。我们可以通过装置spatie/laravel-permission组件来实现权限控制 ,并使用Laravel提供的许多要领和功效来治理角色和权限。通过中间件和路由; ,我们可以便当地;の颐堑挠τ贸绦 ,并限制用户的会见权限。

以上就是laravel装置权限治理的详细内容 ,更多请关注本网内其它相关文章!

免责申明:以上展示内容来源于相助媒体、企业机构、网友提供或网络收集整理 ,版权争议与本站无关 ,文章涉及见解与看法不代表公海彩船滤油机网官方立场 ,请读者仅做参考。本文接待转载 ,转载请说明来由。若您认为本文侵犯了您的版权信息 ,或您发明该内容有任何涉及有违公德、冒犯执法等违法信息 ,请您立即联系公海彩船实时修正或删除。

相关新闻

联系公海彩船

13452372176

可微信在线咨询

事情时间:周一至周五 ,9:30-18:30 ,节假日休息

QR code
网站地图网站地图