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装置权限治理的详细内容,更多请关注本网内其它相关文章!