>  기사  >  PHP 프레임워크  >  laravel의 권한 관리를 설명하는 예

laravel의 권한 관리를 설명하는 예

PHPz
PHPz원래의
2023-04-14 09:33:55589검색

Laravel은 기존 PHP보다 더 나은 보안과 유지 관리 기능을 갖춘 인기 있는 PHP 웹 개발 프레임워크입니다. Laravel 애플리케이션에서는 사용자의 액세스 권한을 보장하기 위해 사용자 액세스 권한을 부여해야 하는 경우가 많습니다. 권한 부여에는 일반적으로 RBAC(역할 기반 액세스 제어) 모델 사용, 사용자 권한 확인 등이 포함됩니다.

그러나 사용자를 다른 경로로 리디렉션하기 전에 개발자는 사용자가 새 경로에 액세스할 수 있는 권한을 갖도록 해당 경로를 승인해야 합니다.

Laravel에서는 다음을 통해 이를 달성할 수 있습니다.

Middleware Authorization

Laravel은 요청이 애플리케이션에 도달하기 전후에 코드를 실행할 수 있는 미들웨어라는 특수 메커니즘을 제공합니다. 미들웨어는 요청이나 응답을 검사하거나 수정하는 데 사용될 수 있습니다. 따라서 미들웨어를 사용하여 경로에 대한 사용자 액세스를 승인할 수 있습니다.

예를 들어 미들웨어를 사용하여 특정 경로에 대한 사용자 액세스 권한을 부여하는 방법은 다음과 같습니다.

먼저 새 미들웨어 클래스를 만들고 여기에 권한 부여 논리를 구현해야 합니다. 간단한 예는 다음과 같습니다.

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthMiddleware
{
    public function handle(Request $request, Closure $next, $role)
    {
        $user = Auth::user();
        if (!$user || !$user->hasRole($role)) {
            // 如果用户未被授权,则跳转到登录页面
            return redirect('/login');
        }
        return $next($request);
    }
}

이 미들웨어는 현재 사용자가 요청한 경로에 액세스할 권한이 있는지 확인하고, 그렇지 않은 경우 사용자를 로그인 페이지로 리디렉션합니다.

다음으로 다음과 같이 경로 정의에서 미들웨어를 사용할 수 있습니다.

use App\Http\Controllers\HomeController;
use App\Http\Middleware\AuthMiddleware;

Route::get('/dashboard', [HomeController::class, 'dashboard'])->middleware(AuthMiddleware::class . ':admin');

이 경로는 승인된 관리자만 액세스할 수 있습니다. 이 요구 사항이 충족되지 않으면 미들웨어는 로그인 페이지로 리디렉션됩니다.

서면 승인

미들웨어가 가장 일반적으로 사용되는 승인 방법이지만 서면 승인이라는 대안도 있습니다. 이 접근 방식에서 개발자는 페이지에 "승인" 버튼을 제공하고 사용자가 이를 클릭하면 승인 확인을 위해 Ajax를 통해 백엔드 서버에 요청합니다.

가능한 방법은 다음과 같습니다.

페이지에 인증 버튼을 추가하고 JavaScript를 사용하여 클릭 이벤트 리스너를 추가합니다. 사용자가 버튼을 클릭하면 Ajax 요청이 트리거되고 해당 요청은 백엔드 Laravel 컨트롤러로 전송됩니다.

백엔드 컨트롤러는 현재 사용자에게 특정 경로에 대한 액세스 권한이 있는지 확인하고, 승인된 경우 응답에 "승인 성공"이라는 JSON 응답을 반환합니다. 그렇지 않으면 응답에 "승인 실패"가 표시되고 로그인 페이지로 리디렉션됩니다.

다음은 Laravel에서 이 인증 방법을 구현하는 예입니다:

JavaScript 코드:

$(document).ready(function() {
    // 添加单击事件监听器
    $('#authorize').click(() => {
        $.ajax({
            url: '/authorize', // 后端授权路由
            type: 'post',
            data: { // 访问参数
                route: '/dashboard',
                user_id: 1 // 当前用户ID
            },
            success: (response) => {
                if (response.authorized) {
                    // 跳转到目标路由
                    window.location.href = response.redirect_url;
                } else {
                    // 显示错误消息或重定向到登录页面
                    window.location.href = '/login';
                }
            },
            error: () => {
                // 处理错误
            }
        });
    });
});

Laravel 컨트롤러 코드:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthorizationController extends Controller
{
    public function authorize(Request $request)
    {
        $user = Auth::user();
        $authorized = /* 根据授权逻辑检查用户是否有权访问该路由 */;
        if (!$authorized) {
            // 如果用户未被授权,则重定向到登录页面
            return response()->json([
                'authorized' => false,
                'redirect_url' => '/login'
            ]);
        }
        // 否则,根据目标路由重定向到新URL
        return response()->json([
            'authorized' => true,
            'redirect_url' => url($request->input('route'))
        ]);
    }
}

요약

Laravel 애플리케이션에서 인증은 사용자 보안 및 데이터 보호 부분을 보장하는 중요한 구성 요소입니다. 미들웨어 또는 서면 인증을 사용하여 사용자를 새로운 경로로 리디렉션하기 전에 사용자의 액세스를 보장하기 위해 액세스 권한을 부여할 수 있습니다. 미들웨어는 가장 일반적으로 사용되는 인증 방법인 반면, 서면 인증은 보다 세부적인 인증 확인을 제공할 수 있습니다. 접근 방식에 관계없이 Laravel은 인증 및 액세스 제어를 지원하는 다양한 메커니즘을 제공합니다.

위 내용은 laravel의 권한 관리를 설명하는 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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