찾다
PHP 프레임워크LaravelLaravel에서 시스템 간 및 도메인 간 권한 관리를 구현하는 방법

Laravel에서 시스템 간 및 도메인 간 권한 관리를 구현하는 방법

Nov 02, 2023 pm 05:02 PM
laravel권한 관리도메인 간 승인

Laravel에서 시스템 간 및 도메인 간 권한 관리를 구현하는 방법

Laravel은 널리 사용되는 PHP 프레임워크로서 풍부한 기능과 탁월한 확장 시스템을 갖추고 있습니다. 권한 관리 구현 측면에서 Laravel은 시스템에서 다양한 권한 관련 기능을 쉽게 구현할 수 있는 풍부한 지원도 제공합니다. 그러나 실제 애플리케이션에서는 여러 시스템 간의 권한 관리나 크로스 도메인 권한 확인이 포함될 수 있습니다. 이 경우 Laravel의 크로스 시스템 및 크로스 도메인 권한 관리 기능을 사용해야 합니다.

이 글에서는 주로 다음 내용을 포함하여 Laravel에서 시스템 간 및 도메인 간 권한 관리를 구현하는 방법을 소개합니다.

  1. Laravel에서 권한 관리에 대한 기본 지식
  2. 시스템 간 권한 관리를 구현하는 방법
  3. 방법 크로스 도메인 권한 구현 검증
  4. Laravel의 권한 관리에 대한 기본 지식

Laravel에서는 Laravel 자체 인증 시스템을 통해 권한 관리를 구현할 수 있습니다. 인증 시스템은 사용자 인증, 권한 부여, 비밀번호 재설정과 같은 기능을 제공합니다. 인증 기능은 주로 Gate 및 Policy 클래스를 통해 구현됩니다.

Gate는 Laravel에서 인증을 구현하는 핵심 클래스입니다. 이를 사용하여 사용자 권한을 정의하고 결정할 수 있습니다. Laravel에서는 app/Providers/AuthServiceProvider.php 파일에 Gate를 정의할 수 있습니다:

public function boot()
{
    $this->registerPolicies();

    Gate::define('update-post', function ($user, $post) {
        return $user->id === $post->user_id;
    });
}

위의 예에서는 현재 사용자에게 기사 수정 권한이 있는지 확인하기 위해 "update-post"라는 Gate를 정의합니다. 판단 조건은 현재 사용자의 ID가 해당 글의 작성자 ID와 동일하다는 것입니다.

Gate를 사용하여 권한을 결정할 때 승인 방법을 직접 사용할 수 있습니다:

public function update(Request $request, Post $post)
{
    $this->authorize('update-post', $post);

    //...
}

이때 현재 사용자에게 기사 수정 권한이 없으면 403 예외가 발생합니다. 예외 정보를 맞춤 설정해야 하는 경우 다음과 같이 텍스트의 세 번째 매개 변수를 전달할 수 있습니다.

$this->authorize('update-post', $post, '你没有权限修改这篇文章');

이때 현재 사용자에게 기사 수정 권한이 없으면 403 예외가 발생합니다. 예외 메시지는 "수정 권한이 없습니다." 이 문서입니다.

위의 예에서는 권한 결정을 위해 $post 객체의 직접 전송을 사용했습니다. 물론, 권한 판단을 위해 다른 매개변수를 전달해야 하는 경우 세 번째 매개변수를 통해 추가 데이터를 배열 형태로 전달할 수도 있습니다.

$this->authorize('update-post', ['post' => $post, 'extra_data' => 'foo']);

Gate에서 판단할 때 두 번째 매개변수를 통해 전달된 데이터를 얻을 수 있습니다.

Gate::define('update-post', function ($user, $post, $extra_data) {
    // can access $extra_data['extra_data'] here
    return $user->id === $post->user_id;
});

Except Gate 외에도 Laravel은 인증을 구현하는 데 사용할 수 있는 Policy라는 또 다른 클래스도 제공합니다. 이에 비해 Policy는 더 유연하며 can이라는 공개 메소드를 정의하여 개발자가 보다 세분화된 권한 제어를 구현할 수 있도록 해줍니다.

class PostPolicy
{
    public function canUpdate($user, Post $post)
    {
        return $user->id === $post->user_id;
    }
}

이 때 권한 판단을 위해 Gate를 사용할 때 Associate Gate 및 Associate Gate 정책 메소드를 사용할 수 있습니다. 정책:

Gate::policy(Post::class, PostPolicy::class);

$this->authorize('update', $post);

위의 예에서는 정책 메소드를 통해 Gate 및 PostPolicy 클래스를 연결하므로 권한 부여 메소드를 사용할 때 Laravel은 자동으로 PostPolicy의 canUpdate 메소드를 호출하여 권한을 결정합니다. 이때 현재 사용자에게 기사 수정 권한이 없으면 403 예외가 발생합니다.

  1. 시스템 간 권한 관리 구현 방법

실제 애플리케이션에서는 한 시스템에서 다른 시스템으로 인증 정보를 전송해야 할 수도 있습니다. 예를 들어, 시스템 A에서 인증 및 권한 부여를 완료하면 이제 시스템 B에서 작업을 수행해야 하지만 사용자가 다시 인증하고 권한을 부여할 필요는 없습니다. 이때 원활한 권한 관리를 위해 시스템 A의 인증 정보를 시스템 B로 전송할 수 있습니다.

Laravel에서는 JWT(JSON Web Token)를 사용하여 시스템 간 권한 관리를 달성할 수 있습니다. JWT는 네트워크 환경에서 정보를 안전하게 전송하기 위한 개방형 표준입니다. 인터넷을 통해 JSON 기반 정보를 안전하게 전송하는 방법을 지정합니다. JWT는 헤더, 페이로드, 서명이라는 세 부분으로 구성됩니다. 이 중 헤더와 페이로드는 Base64를 사용해 인코딩된 JSON 문자열이고, 서명은 HS256과 같은 암호화 알고리즘을 사용해 헤더, 페이로드, 시크릿에서 생성된 해시 값이다.

Laravel에서는 tymon/jwt-auth 확장 패키지를 사용하여 JWT를 생성하고 구문 분석할 수 있습니다. 먼저 tymon/jwt-auth 확장 패키지를 설치해야 합니다.

composer require tymon/jwt-auth

설치가 완료된 후 JWT의 몇 가지 기본 구성을 수행해야 합니다. config/jwt.php 파일에서 구성할 수 있으며 주로 다음을 포함합니다.

  • secret: 암호화 키
  • ttl: 토큰 유효 기간(분)
  • providers: 사용자 공급자, 사용자 신원 확인에 사용
return [
    // ...

    'secret' => env('JWT_SECRET', 'some-secret-string'),

    'ttl' => env('JWT_TTL', 60),

    'refresh_ttl' => env('JWT_REFRESH_TTL', 20160),

    'providers' => [
        'users' => [
            'model' => AppModelsUser::class,
            'credentials' => ['email', 'password'],
        ],
    ],

    // ...
];

After 구성을 완료하면 한 시스템에서 JWT를 생성하여 다른 시스템에 전달할 수 있습니다. 다른 시스템에서는 JWT 구문 분석 기능을 사용하여 JWT에서 사용자 정보 및 권한 정보를 얻을 수 있습니다. 구체적으로 Auth::setUser 메소드를 사용하여 구문 분석된 사용자 정보를 현재 사용자로 설정하고 Gate를 사용하여 권한을 결정할 수 있습니다.

다음은 간단한 예입니다.

시스템 A에서는 JWT를 사용하여 토큰을 생성하고 시스템 B에 전달할 수 있습니다.

$token = JWTAuth::fromUser($user);

return redirect('http://system-b.com?token=' . $token);

시스템 B에서는 사용자 정보 및 권한 정보에서 토큰을 구문 분석할 수 있습니다. :

use IlluminateSupportFacadesAuth;
use TymonJWTAuthFacadesJWTAuth;

$token = request()->get('token');

$user = JWTAuth::parseToken()->authenticate();

Auth::setUser($user);

// ...

Gate::authorize('update', $post);

在上面的例子中,我们使用JWTAuth::parseToken()方法解析Token,成功后,通过authenticate()方法获取到用户信息,并使用Auth::setUser方法将用户信息设置为当前用户。最后,我们可以使用Gate的authorize方法判断当前用户是否有权限进行某些操作。

需要注意的是,为了保证传输安全,我们应该务必在传送Token时进行加密传输,或使用HTTPS协议进行通信。

  1. 如何实现跨域的权限验证

在实际应用中,由于系统之间的跨域限制,可能会导致无法直接进行权限验证。此时,我们可以使用跨域资源共享(CORS)解决跨域问题。CORS是一种允许服务器进行跨域访问的机制,可以通过在响应头中设置Access-Control-Allow-*等相关选项实现。

在Laravel中,要启用CORS,可以使用spatie/laravel-cors扩展包。首先需要安装该扩展包:

composer require spatie/laravel-cors

然后,在config/cors.php文件中进行配置:

return [
    'paths' => ['api/*'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => [],

    'max_age' => 0,

    'supports_credentials' => true,
];

在完成配置后,我们可以在需要使用CORS的路由或控制器中添加CORS相关中间件:

Route::group(['middleware' => ['cors']], function () {
    // ...
});  

public function update(Request $request, Post $post)
{
    $this->authorize('update-post', $post);

    //...
}

在上面的例子中,我们通过将路由或控制器添加到“cors”中间件组中,启用了CORS功能。此时,我们就可以支持跨域的权限验证了。

需要注意的是,为了避免出现安全问题,我们需要仔细配置CORS相关参数,确保只允许来自指定域名和端口的请求访问我们的系统。同时,我们也需要在服务器端使用CSRF和其他相关功能保护系统的安全。

以上就是Laravel에서 시스템 간 및 도메인 간 권한 관리를 구현하는 방법的详细介绍。需要说明的是,本文只是提供了一些基本的实现思路和代码示例,具体的实现细节和方案根据实际的应用情况会有所不同。

위 내용은 Laravel에서 시스템 간 및 도메인 간 권한 관리를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Laravel을 통한 풀 스택 개발 : API 및 프론트 엔드 로직 관리Laravel을 통한 풀 스택 개발 : API 및 프론트 엔드 로직 관리Apr 28, 2025 am 12:22 AM

Laravel Full-Stack Development에서 API 및 프론트 엔드 로직을 관리하는 효과적인 방법은 다음과 같습니다. 1) 편안한 컨트롤러 및 리소스 라우팅 관리 API 사용; 2) 블레이드 템플릿 및 vue.js 또는 반응을 통한 프론트 엔드 로직 처리; 3) API 버전화 및 페이징을 통한 성능 최적화; 4) 유지 관리 및 확장 성을 보장하기 위해 백엔드 및 프론트 엔드 논리의 분리를 유지합니다.

번역 손실 : 분산 팀의 문화적 뉘앙스 및 오해번역 손실 : 분산 팀의 문화적 뉘앙스 및 오해Apr 28, 2025 am 12:22 AM

TotackleculturalIntricaciesindipributedTeams, Fosteranenvernmentcelebratingdifferences, bemindfulofcommunication, andusetoolsforclarity.1) 구현 culturalexChangessessionStosharestoriesandtraditions.2) AdvernCommunicationMethodStosuitculturalPreference

연결 측정 : 원격 커뮤니케이션 효과를위한 분석 및 통찰력연결 측정 : 원격 커뮤니케이션 효과를위한 분석 및 통찰력Apr 28, 2025 am 12:16 AM

toAssesstheeffectiveIneSofRemoteCommunication, FocusOn : 1) indagementMetricsLikemEsageFrequencyAndResponSetime, 2) SentimentAnalySistoGaUgeEmoptionalTone, 3) MeetingEfficivenitesThrougAntSendAndActionItems, and4) NetworkAnalysistOndStandCommiticaticPA

분산 팀의 보안 위험 : 원격 세계의 데이터 보호분산 팀의 보안 위험 : 원격 세계의 데이터 보호Apr 28, 2025 am 12:11 AM

toprotectsensitivedataindipributeedteams, ubstractAmulti-facetedeproach : 1) 사용 엔드-endencryptionforecurecommunication, 2) ApplyRole 기반 AccessControl (RBAC) TomanagePermissions, 3) 암호화 관리 관리 협의 및 4) POSPOROCITION-CONNOCONCONCITIONC

전자 메일 이외 : 원격 협업을위한 최신 커뮤니케이션 플랫폼 탐색전자 메일 이외 : 원격 협업을위한 최신 커뮤니케이션 플랫폼 탐색Apr 28, 2025 am 12:03 AM

아니요, emailisnottheBosteBosteCollaborationToday.Modern PlatformLack, Microsoft Teams, Zoom, Asana 및 TrellofferReal Time Communication, ProjectFeatHancteAmworkandefficiency.

공동 작업 문서 편집 : 분산 팀의 워크 플로우를 간소화합니다공동 작업 문서 편집 : 분산 팀의 워크 플로우를 간소화합니다Apr 27, 2025 am 12:21 AM

협업 문서 편집은 분산 팀이 워크 플로를 최적화 할 수있는 효과적인 도구입니다. 실시간 협업 및 피드백 루프를 통해 커뮤니케이션 및 프로젝트 진행 상황을 향상 시키며 일반적인 도구에는 Google Docs, Microsoft 팀 및 개념이 포함됩니다. 버전 제어 및 학습 곡선과 같은 도전에주의하십시오.

이전 Laravel 버전은 얼마나 오래 지원됩니까?이전 Laravel 버전은 얼마나 오래 지원됩니까?Apr 27, 2025 am 12:17 AM

thepreviousversionoflaravelissupportedwithbugfixesforsforsforsixtsandsandsecurityfixesfixesfixesporoneyearafteranewverversion'srelease. thissupporttimelineiscrucialforplanningupgrades, projectsability, andleveragingnewfeaturesandsecuritenhemenhemen

프론트 엔드 및 백엔드 개발에 대한 Laravel의 기능을 활용합니다프론트 엔드 및 백엔드 개발에 대한 Laravel의 기능을 활용합니다Apr 27, 2025 am 12:16 AM

laravelcanbeefefecticallySticallySticallySticallySticallySticallySticallyBotherBackendDevelopment.1) 백엔드 : utilizelaravel'seloquentormforsimplifiedDatabaseIntercations.2) Frontend : LeverageBladetemPlatesforcleanHtmlandintegratevue.jsfordynamicspas, ensuringseamless-frontendinteg

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

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

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전