在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框架实现权限控制。