Laravel은 매우 인기 있는 PHP 개발 프레임워크로, 개발 효율성을 크게 향상시킬 수 있는 편리한 도구와 구성 요소를 많이 제공합니다. 애플리케이션을 개발하는 과정에서 사용자 권한 관리가 필요한 경우가 많습니다. Laravel은 권한 제어를 빠르고 안전하게 구현하는 데 도움이 되는 매우 편리한 권한 관리 기능을 제공합니다.
이 문서에서는 다음 측면에서 Laravel 권한 관리의 설치 및 구성을 소개합니다.
1. Laravel 권한 관리 컴포넌트 설치
Laravel에서는 Composer를 통해 spatie/laravel-permission 컴포넌트를 설치하여 권한 관리 기능을 구현할 수 있습니다. 이 구성 요소를 설치하려면 프로젝트의 루트 디렉터리에서 다음 명령을 실행할 수 있습니다.
composer require spatie/laravel-permission
설치가 완료된 후 config/app.php 파일에 이 구성 요소의 서비스 공급자를 추가해야 합니다.
'providers' => [ // ... SpatiePermissionPermissionServiceProvider::class, ],
At 동시에, 같은 파일에서 이 컴포넌트의 Facade를 다음 위치에 추가하세요:
'aliases' => [ // ... 'Permission' => SpatiePermissionFacadesPermission::class, 'Role' => SpatiePermissionFacadesRole::class, ],
2. 데이터베이스 마이그레이션
컴포넌트를 설치한 후 권한 관련 테이블을 생성하려면 데이터베이스 마이그레이션을 실행해야 합니다. 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
이런 방식으로 관련 테이블이 데이터베이스에 생성됩니다.
3. 사용자 인증
다음으로, 애플리케이션에 사용자 인증 기능을 구현해야 합니다. Laravel은 매우 편리한 사용자 인증 시스템을 제공합니다. 다음 명령만 실행하면 됩니다:
php artisan make:auth
이 명령은 사용자 로그인, 등록, 비밀번호 변경 및 기타 기능이 포함된 페이지를 생성합니다. 이러한 작업을 통해 사용자를 생성하고 관리할 수 있습니다.
4. 역할 및 권한 관리
Laravel 권한 관리에서는 역할과 권한이 매우 중요한 개념입니다. 역할과 권한을 통해 사용자 액세스 제어 규칙을 정의할 수 있습니다.
역할 파사드를 사용하여 역할을 생성할 수 있습니다. 예:
use SpatiePermissionModelsRole; $role = Role::create(['name' => 'admin']);
위 코드는 "admin"이라는 역할을 생성합니다.
마찬가지로 권한을 생성하기 위해 Permission 파사드를 사용할 수 있습니다:
use SpatiePermissionModelsPermission; $permission = Permission::create(['name' => 'create posts']);
위 코드는 "create post"라는 권한을 생성합니다.
이제 역할과 권한이 있으므로 역할에 권한도 부여해야 합니다. 역할의 givePermissionTo 메소드를 사용하여 이를 수행할 수 있습니다:
$role = Role::findByName('admin'); $permission = Permission::findByName('create posts'); $role->givePermissionTo($permission);
이제 역할과 권한을 정의했으므로 Laravel 권한 관리에서 제공하는 can 메소드를 사용하여 권한이 있는지 확인할 수 있습니다. 사용자에게 권한이 있습니다. 예:
$user->can('create posts');
위 코드는 현재 사용자에게 "게시물 작성" 권한이 있는지 여부를 나타내는 부울 값을 반환합니다.
마찬가지로 hasRole 메소드를 사용하여 사용자에게 특정 역할이 있는지 확인할 수도 있습니다. 예:
$user->hasRole('admin');
위 코드는 현재 사용자에게 "관리자" 역할이 있는지 여부를 나타내는 부울 값을 반환합니다.
5. 미들웨어
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" 역할과 "게시물 작성" 권한이 있는 사용자에게만 액세스를 허용합니다.
6. 경로 보호
마지막으로 경로와 컨트롤러를 보호해야 합니다. 이를 달성하기 위해 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); } // ... }
위 코드는 저장 및 편집 메소드를 보호하고 "생성" 및 "편집" 권한이 있는 사용자에게만 액세스를 허용합니다.
요약
일반적으로 Laravel의 권한 관리는 매우 편리하고 안전합니다. spatie/laravel-permission 컴포넌트를 설치하여 권한 제어를 구현할 수 있으며, Laravel에서 제공하는 다양한 메소드와 기능을 사용하여 역할과 권한을 관리할 수 있습니다. 미들웨어 및 경로 보호를 통해 애플리케이션을 쉽게 보호하고 사용자 액세스를 제한할 수 있습니다.
위 내용은 laravel 설치 권한 관리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!