laravel 설치 권한 관리

WBOY
풀어 주다: 2023-05-26 14:27:37
원래의
1516명이 탐색했습니다.

Laravel은 매우 인기 있는 PHP 개발 프레임워크로, 개발 효율성을 크게 향상시킬 수 있는 편리한 도구와 구성 요소를 많이 제공합니다. 애플리케이션을 개발하는 과정에서 사용자 권한 관리가 필요한 경우가 많습니다. Laravel은 권한 제어를 빠르고 안전하게 구현하는 데 도움이 되는 매우 편리한 권한 관리 기능을 제공합니다.

이 문서에서는 다음 측면에서 Laravel 권한 관리의 설치 및 구성을 소개합니다.

  1. Laravel 권한 관리 구성요소 설치
  2. 데이터베이스 마이그레이션
  3. 사용자 인증
  4. 역할 및 권한 관리
  5. 미들웨어
  6. 경로 보호

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 권한 관리에서는 역할과 권한이 매우 중요한 개념입니다. 역할과 권한을 통해 사용자 액세스 제어 규칙을 정의할 수 있습니다.

  1. 역할 만들기

역할 파사드를 사용하여 역할을 생성할 수 있습니다. 예:

use SpatiePermissionModelsRole;

$role = Role::create(['name' => 'admin']);
로그인 후 복사

위 코드는 "admin"이라는 역할을 생성합니다.

  1. 권한 만들기

마찬가지로 권한을 생성하기 위해 Permission 파사드를 사용할 수 있습니다:

use SpatiePermissionModelsPermission;

$permission = Permission::create(['name' => 'create posts']);
로그인 후 복사

위 코드는 "create post"라는 권한을 생성합니다.

  1. 역할에 권한 부여

이제 역할과 권한이 있으므로 역할에 권한도 부여해야 합니다. 역할의 givePermissionTo 메소드를 사용하여 이를 수행할 수 있습니다:

$role = Role::findByName('admin');
$permission = Permission::findByName('create posts');
$role->givePermissionTo($permission);
로그인 후 복사
  1. 사용자에게 권한이 있는지 확인

이제 역할과 권한을 정의했으므로 Laravel 권한 관리에서 제공하는 can 메소드를 사용하여 권한이 있는지 확인할 수 있습니다. 사용자에게 권한이 있습니다. 예:

$user->can('create posts');
로그인 후 복사

위 코드는 현재 사용자에게 "게시물 작성" 권한이 있는지 여부를 나타내는 부울 값을 반환합니다.

  1. 사용자에게 역할이 있는지 확인

마찬가지로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿