centos

centos下laravel如何实现权限控制

小樊
45
2025-07-22 17:24:45
栏目: 智能运维

在CentOS系统下,使用Laravel框架实现权限控制通常涉及以下几个步骤:

  1. 安装Laravel: 如果你还没有安装Laravel,请先按照官方文档进行安装。

  2. 创建用户模型和迁移文件: 使用Artisan命令创建用户模型和迁移文件。

    php artisan make:model User -m
    
  3. 定义用户模型: 在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);
        }
    }
    
  4. 创建角色和权限模型: 使用Artisan命令创建角色和权限模型以及迁移文件。

    php artisan make:model Role -m
    php artisan make:model Permission -m
    
  5. 定义角色和权限模型: 在app/Models/Role.phpapp/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);
        }
    }
    
  6. 创建迁移文件: 在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');
        }
    }
    
  7. 运行迁移: 运行迁移命令以创建数据库表。

    php artisan migrate
    
  8. 定义中间件: 创建中间件来检查用户是否有权限访问某个路由。

    php artisan make:middleware CheckPermission
    
  9. 实现中间件逻辑: 在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);
        }
    }
    
  10. 注册中间件: 在app/Http/Kernel.php文件中注册中间件。

    protected $routeMiddleware = [
        // 其他中间件
        'permission' => \App\Http\Middleware\CheckPermission::class,
    ];
    
  11. 应用中间件: 在路由文件中应用中间件。

    Route::get('/admin', [AdminController::class, 'index'])->middleware('permission:manage_users');
    

通过以上步骤,你可以在CentOS系统下使用Laravel框架实现权限控制。

0
看了该问题的人还看了