centos下laravel如何实现权限控制
在CentOS系统下,使用Laravel框架实现权限控制通常涉及以下几个步骤:
-
安装Laravel: 如果你还没有安装Laravel,请先按照官方文档进行安装。
-
创建用户模型和迁移文件: 使用Artisan命令创建用户模型和迁移文件。
php artisan make:model User -m
-
定义用户模型: 在
app/Models/User.php
文件中定义用户模型,并添加必要的属性和方法。namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasFactory; // 定义用户可以访问的路由 public function roles() { return $this->belongsToMany(Role::class); } // 定义用户可以拥有的权限 public function permissions() { return $this->belongsToMany(Permission::class); } }
-
创建角色和权限模型: 使用Artisan命令创建角色和权限模型以及迁移文件。
php artisan make:model Role -m php artisan make:model Permission -m
-
定义角色和权限模型: 在
app/Models/Role.php
和app/Models/Permission.php
文件中定义角色和权限模型,并添加必要的属性和方法。// app/Models/Role.php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Role extends Model { use HasFactory; public function users() { return $this->belongsToMany(User::class); } public function permissions() { return $this->belongsToMany(Permission::class); } } // app/Models/Permission.php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Permission extends Model { use HasFactory; public function roles() { return $this->belongsToMany(Role::class); } }
-
创建迁移文件: 在
database/migrations
目录下创建角色和权限的迁移文件,并定义它们之间的关系。// database/migrations/xxxx_xx_xx_xxxxxx_create_roles_table.php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateRolesTable extends Migration { public function up() { Schema::create('roles', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('display_name')->nullable(); $table->timestamps(); }); } public function down() { Schema::dropIfExists('roles'); } } // database/migrations/xxxx_xx_xx_xxxxxx_create_permissions_table.php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreatePermissionsTable extends Migration { public function up() { Schema::create('permissions', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('display_name')->nullable(); $table->timestamps(); }); } public function down() { Schema::dropIfExists('permissions'); } } // database/migrations/xxxx_xx_xx_xxxxxx_create_role_user_table.php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateRoleUserTable extends Migration { public function up() { Schema::create('role_user', function (Blueprint $table) { $table->foreignId('role_id')->constrained()->onDelete('cascade'); $table->foreignId('user_id')->constrained()->onDelete('cascade'); $table->primary(['role_id', 'user_id']); }); } public function down() { Schema::dropIfExists('role_user'); } } // database/migrations/xxxx_xx_xx_xxxxxx_create_permission_role_table.php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreatePermissionRoleTable extends Migration { public function up() { Schema::create('permission_role', function (Blueprint $table) { $table->foreignId('permission_id')->constrained()->onDelete('cascade'); $table->foreignId('role_id')->constrained()->onDelete('cascade'); $table->primary(['permission_id', 'role_id']); }); } public function down() { Schema::dropIfExists('permission_role'); } }
-
运行迁移: 运行迁移命令以创建数据库表。
php artisan migrate
-
定义中间件: 创建中间件来检查用户是否有权限访问某个路由。
php artisan make:middleware CheckPermission
-
实现中间件逻辑: 在
app/Http/Middleware/CheckPermission.php
文件中实现中间件逻辑。namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class CheckPermission { public function handle($request, Closure $next, $permission) { if (!Auth::check()) { return redirect('/login'); } $user = Auth::user(); if (!$user->permissions->contains('name', $permission)) { abort(403); } return $next($request); } }
-
注册中间件: 在
app/Http/Kernel.php
文件中注册中间件。protected $routeMiddleware = [ // 其他中间件 'permission' => \App\Http\Middleware\CheckPermission::class, ];
-
应用中间件: 在路由文件中应用中间件。
Route::get('/admin', [AdminController::class, 'index'])->middleware('permission:manage_users');
通过以上步骤,你可以在CentOS系统下使用Laravel框架实现权限控制。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权请联系我们,一经查实立即删除!