Laravel에서 역할 기반 액세스 제어를 구현하는 방법
Laravel에서 역할 기반 액세스 제어를 구현하는 방법
인용문:
웹 애플리케이션에서 액세스 제어는 민감한 데이터와 민감한 작업을 보호하는 데 중요한 부분입니다. 역할 기반 액세스 제어는 사용자가 자신의 역할에 따라 수행할 수 있는 작업을 제한할 수 있는 일반적인 액세스 제어 전략입니다.
Laravel은 역할 기반 액세스 제어를 구현하는 간단하면서도 강력한 기능을 제공하는 인기 있는 PHP 프레임워크입니다. 이 글에서는 Laravel을 사용하여 역할 기반 액세스 제어를 구현하는 방법을 다루고 구체적인 코드 예제를 제공합니다.
1단계: 데이터베이스 준비
먼저 사용자, 역할, 권한 정보를 저장할 데이터베이스를 만들어야 합니다. Laravel의 마이그레이션 기능을 사용하여 데이터베이스 테이블을 생성할 수 있습니다. 다음은 사용자, 역할 및 권한의 마이그레이션 파일 예시입니다.
<?php use IlluminateDatabaseMigrationsMigration; use IlluminateDatabaseSchemaBlueprint; use IlluminateSupportFacadesSchema; class CreateRolesAndPermissionsTables extends Migration { /** * Run the migrations. * * @return void */ public function up() { // 创建角色表 Schema::create('roles', function (Blueprint $table) { $table->id(); $table->string('name')->unique(); $table->timestamps(); }); // 创建权限表 Schema::create('permissions', function (Blueprint $table) { $table->id(); $table->string('name')->unique(); $table->timestamps(); }); // 创建用户表 Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->timestamps(); }); // 创建用户角色表 Schema::create('role_user', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('user_id'); $table->unsignedBigInteger('role_id'); $table->timestamps(); }); // 创建角色权限表 Schema::create('permission_role', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('permission_id'); $table->unsignedBigInteger('role_id'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { // 删除表格 Schema::dropIfExists('permission_role'); Schema::dropIfExists('role_user'); Schema::dropIfExists('users'); Schema::dropIfExists('permissions'); Schema::dropIfExists('roles'); } }
마이그레이션 명령을 실행하여 데이터베이스 테이블을 생성합니다.
php artisan migrate
2단계: 모델 및 관계 정의
Laravel에서는 모델과 관계를 사용하여 사용자를 관리할 수 있습니다. , 역할 및 권한과 같은 데이터. 다음은 모델 및 관계 정의의 예입니다.
<?php namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateFoundationAuthUser as Authenticatable; class User extends Authenticatable { use HasFactory; /** * 获取用户的角色 */ public function roles() { return $this->belongsToMany(Role::class, 'role_user'); } /** * 检查用户是否具有指定角色 */ public function hasRole($role) { return $this->roles->contains('name', $role); } } class Role extends Model { use HasFactory; /** * 获取角色的权限 */ public function permissions() { return $this->belongsToMany(Permission::class, 'permission_role'); } } class Permission extends Model { use HasFactory; }
3단계: 정책 정의
Laravel에서 정책은 특정 리소스에 대한 확인된 사용자의 권한을 정의하는 데 사용됩니다. 정책을 사용하여 역할 기반 액세스 제어를 구현할 수 있습니다. 다음은 정책 정의의 예입니다:
<?php namespace AppPolicies; use AppModelsUser; use IlluminateAuthAccessHandlesAuthorization; class PostPolicy { use HandlesAuthorization; /** * 确定用户是否有权限更新一个帖子 */ public function update(User $user, Post $post) { return $user->hasRole('admin') || $user->hasRole('editor'); } }
4단계: 정책 등록
정책을 사용하려면 Laravel의 정책 공급자에 등록해야 합니다. app/Providers/AuthServiceProvider.php
파일을 열고 다음 코드를 추가하세요:
<?php namespace AppProviders; use IlluminateSupportFacadesGate; use IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider; use AppPoliciesPostPolicy; class AuthServiceProvider extends ServiceProvider { protected $policies = [ 'AppModelsPost' => 'AppPoliciesPostPolicy', ]; public function boot() { $this->registerPolicies(); } }
5단계: 미들웨어 사용
역할 기반 액세스 제어를 구현하려면 경로와 컨트롤러에서 Laravel의 미들웨어를 사용하여 사용자 역할을 확인할 수 있습니다. 다음은 미들웨어 정의의 예입니다.
<?php namespace AppHttpMiddleware; use Closure; class RoleMiddleware { public function handle($request, Closure $next, ...$roles) { if (!$request->user()->hasAnyRole($roles)) { abort(403, 'Unauthorized action.'); } return $next($request); } }
6단계: 미들웨어를 사용하여 경로 액세스 제한
마지막으로 지정된 경로 또는 경로 그룹에 미들웨어를 적용하여 사용자 액세스를 제한할 수 있습니다. 다음은 예제 경로에 대한 코드입니다:
<?php use AppHttpMiddlewareRoleMiddleware; Route::get('/admin/dashboard', function () { // 管理员和编辑者才能访问 })->middleware(RoleMiddleware::class . ':admin,editor');
요약:
Laravel의 데이터베이스, 모델, 관계, 전략 및 미들웨어 기능을 통해 역할 기반 액세스 제어를 쉽게 구현할 수 있습니다. 위에는 Laravel에서 역할 기반 액세스 제어를 구현하는 방법에 대한 자세한 단계와 코드 예제가 있습니다. 이 글이 Laravel의 접근 제어 기능을 더 잘 이해하고 사용하는 데 도움이 되기를 바랍니다.
위 내용은 Laravel에서 역할 기반 액세스 제어를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Laravel - Artisan Commands - Laravel 5.7은 새로운 명령을 처리하고 테스트하는 새로운 방법을 제공합니다. 여기에는 장인 명령을 테스트하는 새로운 기능이 포함되어 있으며 데모는 아래에 언급되어 있습니다.

Laravel - 페이지 매김 사용자 정의 - Laravel에는 사용자나 개발자가 페이지 매김 기능을 포함하는 데 도움이 되는 페이지 매김 기능이 포함되어 있습니다. Laravel 페이지네이터는 쿼리 빌더 및 Eloquent ORM과 통합되어 있습니다. 자동 페이지 매김 방법

Laravel 이메일 전송이 실패 할 때 반환 코드를 얻는 방법. Laravel을 사용하여 응용 프로그램을 개발할 때 종종 확인 코드를 보내야하는 상황이 발생합니다. 그리고 실제로 ...

laravel 일정 작업 실행 비 응답 문제 해결 Laravel의 일정 작업 일정을 사용할 때 많은 개발자 가이 문제에 직면합니다 : 스케줄 : 실행 ...

Laravel의 이메일을 처리하지 않는 방법은 LaRavel을 사용하는 것입니다.

DCAT를 사용할 때 DCATADMIN (LARAVEL-ADMIN)에서 데이터를 추가하려면 사용자 정의의 테이블 기능을 구현하는 방법 ...

Laravel - 덤프 서버 - Laravel 덤프 서버는 Laravel 5.7 버전과 함께 제공됩니다. 이전 버전에는 덤프 서버가 포함되어 있지 않습니다. 덤프 서버는 laravel/laravel 작곡가 파일의 개발 종속성이 됩니다.

Laravel 프레임 워크 및 Laravel 프레임 워크 및 Redis를 사용할 때 Redis 연결을 공유하는 데 영향을 줄 수 있습니다. 개발자는 문제가 발생할 수 있습니다. 구성을 통해 ...
