PHP 프레임워크 Laravel Laravel 권한 기능에 대한 모범 사례: 사용자 권한을 올바르게 제어하는 ​​방법

Laravel 권한 기능에 대한 모범 사례: 사용자 권한을 올바르게 제어하는 ​​방법

Nov 02, 2023 pm 12:32 PM
laravel 모범 사례 권한 제어

Laravel 권한 기능에 대한 모범 사례: 사용자 권한을 올바르게 제어하는 ​​방법

Laravel 권한 기능 모범 사례: 사용자 권한을 올바르게 제어하는 ​​방법, 특정 코드 예제가 필요합니다.

소개:

Laravel은 매우 강력하고 인기 있는 PHP 프레임워크로 효율적이고 보안 웹 애플리케이션. 중요한 기능 중 하나는 역할과 권한에 따라 애플리케이션의 다른 부분에 대한 사용자 액세스를 제한하는 권한 제어입니다.

적절한 권한 제어는 민감한 데이터와 기능에 무단 사용자가 액세스하지 못하도록 보호하는 모든 웹 애플리케이션의 핵심 구성 요소입니다. 이 글에서는 Laravel의 권한 제어 모범 사례에 대해 논의하고 구체적인 코드 예제를 제공합니다.

1. Laravel 인증 기능 설치 및 설정

먼저 Laravel에 인증 기능을 설치하고 설정해야 합니다. 이 작업을 수행하기 위해 Laravel의 내장 명령을 사용할 수 있습니다. 터미널을 열고 다음 명령을 실행하세요:

composer require laravel/ui
php artisan ui bootstrap --auth

위 명령은 Laravel의 사용자 인터페이스 팩을 설치하고 기본 인증 및 등록 컨트롤러를 생성합니다.

다음으로 사용자 역할 정보를 저장하기 위해 데이터베이스에 roles라는 테이블을 생성해야 합니다. 이 작업을 수행하기 위해 Laravel에서 제공하는 마이그레이션 도구를 사용할 수 있습니다. 다음 명령을 실행하세요: roles 的表,以保存用户角色的信息。我们可以使用Laravel提供的迁移工具来完成这个任务。运行以下命令:

php artisan make:migration create_roles_table --create=roles

运行上述命令后,Laravel 将在 database/migrations 文件夹中生成一个新的迁移文件。打开该文件并更新 up 方法,如下所示:

use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;

class CreateRolesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('roles', function (Blueprint $table) {
            $table->id();
            $table->string('name')->unique();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('roles');
    }
}

保存并关闭文件后,运行以下命令来执行迁移文件:

php artisan migrate

现在,我们已经完成了 Laravel 的授权功能的设置。

二、定义用户和角色模型

接下来,我们需要定义用户和角色模型,并在它们之间建立关系。

首先,我们需要创建一个 Role 模型。运行以下命令来生成模型文件:

php artisan make:model Role

接下来,我们需要在 Role 模型中添加与用户的关联。打开 app/Role.php 文件并将以下代码添加到类中:

public function users()
{
    return $this->hasMany(User::class);
}

接下来,我们需要创建 User 模型。运行以下命令来生成模型文件:

php artisan make:model User

然后,我们需要在 User 模型中添加与角色的关联。打开 app/User.php 文件并将以下代码添加到类中:

public function role()
{
    return $this->belongsTo(Role::class);
}

保存并关闭文件后,在 terminal 中运行以下命令来确保 User 模型与 users 数据表进行关联:

composer dump-autoload

我们已经成功定义了用户和角色模型,并建立了它们之间的关系。

三、定义用户访问控制方法

现在,我们需要定义一些用户访问控制方法,以便在应用程序中进行权限检查。

首先,我们需要定义一个 hasPermission 方法来检查用户是否具有特定的权限。打开 app/User.php 文件,并在 User 类中添加以下方法:

public function hasPermission($permission)
{
    return $this->role->permissions()->where('name', $permission)->exists();
}

接下来,我们需要定义一个 role 方法来检查用户的角色。打开 app/User.php 文件,并在 User 类中添加以下方法:

public function role()
{
    return $this->belongsTo(Role::class);
}

保存并关闭文件后,我们已经成功定义了用于用户访问控制的方法。

四、定义角色和权限模型

接下来,我们需要定义角色和权限模型,并在它们之间建立关系。

首先,我们需要创建一个 Permission 模型。运行以下命令来生成模型文件:

php artisan make:model Permission

接下来,我们需要在 Permission 模型中添加与角色的关联。打开 app/Permission.php 文件并将以下代码添加到类中:

public function roles()
{
    return $this->belongsToMany(Role::class);
}

接下来,我们需要创建一个 Role 模型。运行以下命令来生成模型文件:

php artisan make:model Role

然后,我们需要在 Role 模型中添加与权限的关联。打开 app/Role.php 文件并将以下代码添加到类中:

public function permissions()
{
    return $this->belongsToMany(Permission::class);
}

保存并关闭文件后,运行以下命令来确保模型与对应的数据表进行关联:

composer dump-autoload

我们已经成功定义了角色和权限模型,并建立了它们之间的关系。

五、定义访问控制中间件

最后,我们需要定义一个访问控制中间件,以便在访问受限制的路由时进行权限检查。

首先,我们需要在 app/Http/Kernel.php 文件中注册中间件。打开文件并将以下代码添加到 routeMiddleware 数组中:

'permission' => AppHttpMiddlewarePermissionMiddleware::class,

接下来,我们需要创建一个 PermissionMiddleware 类。运行以下命令来生成类文件:

php artisan make:middleware PermissionMiddleware

然后,我们需要在 PermissionMiddleware 中间件类中实现逻辑来进行权限检查。打开 app/Http/Middleware/PermissionMiddleware.php

public function handle($request, Closure $next, $permission)
{
    $user = Auth::user();

    if (!$user->hasPermission($permission)) {
        abort(403, 'Unauthorized');
    }

    return $next($request);
}

위 명령을 실행한 후 Laravel은 database/migrations 폴더에 새 마이그레이션 파일을 생성합니다. 파일을 열고 다음과 같이 up 메소드를 업데이트합니다. 🎜rrreee🎜파일을 저장하고 닫은 후 다음 명령을 실행하여 마이그레이션 파일을 실행합니다. 🎜rrreee🎜이제 인증 기능이 완료되었습니다. 라라벨이 설정되었습니다. 🎜🎜2. 사용자 및 역할 모델 정의🎜🎜다음으로 사용자와 역할 모델을 정의하고 이들 간의 관계를 설정해야 합니다. 🎜🎜먼저 역할 모델을 만들어야 합니다. 다음 명령을 실행하여 모델 파일을 생성합니다. 🎜rrreee🎜 다음으로 Role 모델에 사용자와의 연결을 추가해야 합니다. app/Role.php 파일을 열고 클래스에 다음 코드를 추가합니다. 🎜rrreee🎜다음으로 User 모델을 만들어야 합니다. 다음 명령을 실행하여 모델 파일을 생성합니다. 🎜rrreee🎜 그런 다음 User 모델의 역할에 연결을 추가해야 합니다. app/User.php 파일을 열고 클래스에 다음 코드를 추가합니다. 🎜rrreee🎜파일을 저장하고 닫은 후 터미널에서 다음 명령을 실행하여 User< /code> 모델은 연결할 <code>users 데이터 테이블과 일치합니다. 🎜rrreee🎜사용자와 역할 모델을 성공적으로 정의하고 이들 간의 관계를 설정했습니다. 🎜🎜3. 사용자 액세스 제어 방법 정의 🎜🎜이제 애플리케이션에서 권한 확인을 위한 일부 사용자 액세스 제어 방법을 정의해야 합니다. 🎜🎜먼저, 사용자에게 특정 권한이 있는지 확인하려면 hasPermission 메서드를 정의해야 합니다. app/User.php 파일을 열고 User 클래스에 다음 메서드를 추가합니다. 🎜rrreee🎜다음으로 역할을 정의해야 합니다. 사용자의 역할을 확인하는 방법. app/User.php 파일을 열고 User 클래스에 다음 메서드를 추가합니다. 🎜rrreee🎜파일을 저장하고 닫은 후 사용자 액세스 제어를 성공적으로 정의했습니다. 행동 양식. 🎜🎜4. 역할 및 권한 모델 정의🎜🎜다음으로 역할 및 권한 모델을 정의하고 이들 간의 관계를 설정해야 합니다. 🎜🎜먼저 권한 모델을 만들어야 합니다. 다음 명령을 실행하여 모델 파일을 생성합니다. 🎜rrreee🎜 다음으로 Permission 모델의 역할에 연결을 추가해야 합니다. app/Permission.php 파일을 열고 클래스에 다음 코드를 추가합니다. 🎜rrreee🎜다음으로 Role 모델을 생성해야 합니다. 다음 명령을 실행하여 모델 파일을 생성합니다. 🎜rrreee🎜 그런 다음 Role 모델에 권한과의 연결을 추가해야 합니다. app/Role.php 파일을 열고 클래스에 다음 코드를 추가합니다. 🎜rrreee🎜파일을 저장하고 닫은 후 다음 명령을 실행하여 모델이 해당 데이터 테이블과 연결되어 있는지 확인합니다. : 🎜rrreee🎜us 역할 및 권한 모델이 성공적으로 정의되었으며 이들 간의 관계가 설정되었습니다. 🎜🎜5. 액세스 제어 미들웨어 정의🎜🎜마지막으로 제한된 경로에 액세스할 때 권한 확인을 수행하기 위한 액세스 제어 미들웨어를 정의해야 합니다. 🎜🎜먼저 app/Http/Kernel.php 파일에 미들웨어를 등록해야 합니다. 파일을 열고 routeMiddleware 배열에 다음 코드를 추가합니다. 🎜rrreee🎜다음으로 PermissionMiddleware 클래스를 만들어야 합니다. 다음 명령을 실행하여 클래스 파일을 생성합니다. 🎜rrreee🎜 그런 다음 권한 확인을 위해 PermissionMiddleware 미들웨어 클래스에 논리를 구현해야 합니다. app/Http/Middleware/PermissionMiddleware.php 파일을 열고 클래스에 다음 코드를 추가합니다. 🎜
public function handle($request, Closure $next, $permission)
{
    $user = Auth::user();

    if (!$user->hasPermission($permission)) {
        abort(403, 'Unauthorized');
    }

    return $next($request);
}

以上代码会检查当前用户是否具有特定的权限。如果用户没有该权限,则会返回 HTTP 403 状态码。

保存并关闭文件后,我们已经成功定义了访问控制中间件。

结束语:

通过本文中的步骤,我们已经了解了 Laravel 中权限控制的最佳实践,以及如何正确控制用户权限。我们在代码示例中演示了如何安装和设置 Laravel 的授权功能,定义用户和角色模型,访问控制方法,角色和权限模型,以及访问控制中间件的实现。

通过正确实现权限控制,我们可以保护敏感数据和功能,并根据用户角色和权限来限制其对应用程序中不同部分的访问。这不仅可以增加应用程序的安全性,还可以提供更好的用户体验。

希望本文能够帮助您理解 Laravel 中权限控制的最佳实践,以及如何正确控制用户权限。通过合理应用这些技术,您可以开发出更安全和高效的Web应用程序。

위 내용은 Laravel 권한 기능에 대한 모범 사례: 사용자 권한을 올바르게 제어하는 ​​방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

뜨거운 주제

PHP 튜토리얼
1596
276
Laravel에서 추천 시스템을 구현하는 방법은 무엇입니까? Laravel에서 추천 시스템을 구현하는 방법은 무엇입니까? Aug 02, 2025 am 06:55 AM

추천, 추천, 추천 코드 및 사용 시간을 포함하여 추천 관계를 기록 할 추천 테이블을 작성합니다. 2. 추천 데이터를 관리하기 위해 사용자 모델의 SONGSTOMONY 및 HASMANY 관계 정의; 3. 등록 할 때 고유 한 권장 코드를 생성합니다 (모델 이벤트를 통해 구현할 수 있음). 4. 등록 중 매개 변수를 쿼리하여 권장 코드를 캡처하고 확인 후 권장 관계를 설정하고 자체 권장을 방지합니다. 5. 권장 사용자가 지정된 동작 (구독 순서)을 완료하면 보상 메커니즘을 트리거합니다. 6. 공유 가능한 추천 링크를 생성하고 Laravel Signature URL을 사용하여 보안을 향상시킵니다. 7. 총 권장 사항 수 및 변환 숫자와 같은 대시 보드에 권장 통계를 표시합니다. 데이터베이스 제약, 세션 또는 쿠키가 지속되도록해야합니다.

Laravel의 Eloquent에서 액세서와 돌연변이를 사용하는 방법은 무엇입니까? Laravel의 Eloquent에서 액세서와 돌연변이를 사용하는 방법은 무엇입니까? Aug 02, 2025 am 08:32 AM

Accessorsandmutatorsinlaravel'SeloquentOrmallowyoutoformatormanipulatemodelttributeswhenrievingerttingvalues.1.useaccessorstocustomizeattributerretrieval, suchAscapitalizationFiRST_NAMEVAGETFIRSTMAITTRIBES ($ value) ReturnUcfirst ($ value) .2

Laravel의 저장소 계약은 무엇입니까? Laravel의 저장소 계약은 무엇입니까? Aug 03, 2025 am 12:10 AM

저장소 패턴은 데이터 액세스 로직에서 비즈니스 로직을 분리하는 데 사용되는 설계 패턴입니다. 1. 인터페이스 (계약)를 통해 데이터 액세스 방법을 정의합니다. 2. 특정 작업은 저장소 클래스에 의해 구현됩니다. 3. 컨트롤러는 종속성 주입을 통해 인터페이스를 사용하며 데이터 소스에 직접 접촉하지 않습니다. 4. 장점에는 깔끔한 코드, 강력한 테스트 가능성, 쉬운 유지 보수 및 팀 협업이 포함됩니다. 5. 중간 및 대규모 프로젝트에 적용 할 수있는 소규모 프로젝트는 모델을 직접 사용할 수 있습니다.

Laravel의 Eloquent에서 하위 쿼리를 사용하는 방법은 무엇입니까? Laravel의 Eloquent에서 하위 쿼리를 사용하는 방법은 무엇입니까? Aug 05, 2025 am 07:53 AM

laraveleloquentsupportsSubqueriesinselect, 어디에서, 어디서, andoRderByclauses, enableflexibleAtAretrievalwithoutrawsql; 1.useselectSub () toaddcomputedColumnslikepostCountPerUser; 2.usefromsub () orclosureInfrom () TOTREATSUREATSURBURYASUBLEADSUBLOUCABUREATSUBLEATSUBLEATSUBUREGROUTHER

Laravel로 편안한 API를 만드는 방법? Laravel로 편안한 API를 만드는 방법? Aug 02, 2025 pm 12:31 PM

Laravel 프로젝트를 작성하고 데이터베이스 환경을 구성하십시오. 2. 장인을 사용하여 모델, 마이그레이션 및 컨트롤러를 생성합니다. 3. API.php에서 API 리소스 라우팅을 정의합니다. 4. 컨트롤러에서 추가, 삭제, 수정 및 쿼리 메소드를 구현하고 요청 확인을 사용합니다. 5. API 인증을 구현하고 경로를 보호하기 위해 LaRavelsanctum을 설치하십시오. 6. JSON 응답 형식을 통합하고 오류를 처리합니다. 7. Postman 및 기타 도구를 사용하여 API를 테스트하고 완전하고 확장 가능한 RESTFULAPI를 얻으십시오.

Laravel MVC : 아키텍처 제한 Laravel MVC : 아키텍처 제한 Aug 03, 2025 am 12:50 AM

laravel'simplementationofmvchaslimitations : 1) 컨트롤러는 WhithModelandViewTouse, 2) EloquentModelsCantakeOntoMonySponsibilityBeyondDateRepresentation.3) ViewSarethightlyCoupled의 My

Laravel Cashier와의 반복 지불을 처리하는 방법은 무엇입니까? Laravel Cashier와의 반복 지불을 처리하는 방법은 무엇입니까? Aug 06, 2025 pm 01:38 PM

installlaravelcashierviacomposerandconfiguremigrationandbillabletrait.2.createsubscriptionplansinstripedashboardandnoteplanids.3.collectPaymentMethodusingStripeChoutandStoreItViaSetUpIntent.4.subsCribsUserToapLanusingNewsUbscription () 및 defaultpery ()

MVC 이해 : Laravel이 모델 뷰 컨트롤러 패턴을 구현하는 방법 MVC 이해 : Laravel이 모델 뷰 컨트롤러 패턴을 구현하는 방법 Aug 02, 2025 am 01:04 AM

laravelimplesmentsThemvcpatternByusingModelsfordelsfordAtamanagemanagement, 컨트롤러 버전, andviewsforpresentation.1) modelsinlaravelarepowerfulormshandlingdataandrelationships.2) controllersmanageTheflowbetweenModelSandViews.3) viewSuseBladetemplatingfor

See all articles