Laravelの認可管理を説明する例

PHPz
リリース: 2023-04-14 09:36:55
オリジナル
633 人が閲覧しました

Laravel は、従来の PHP よりも優れたセキュリティと保守性を備えた人気のある PHP Web 開発フレームワークです。 Laravel アプリケーションでは、多くの場合、ユーザーのアクセス権を確保するためにユーザーのアクセスを承認する必要があります。承認には通常、ロールベースのアクセス制御 (RBAC) モデルの使用、ユーザーの権限の確認などが含まれます。

ただし、ユーザーを別のルートにリダイレクトする前に、開発者はそれらのルートを承認して、ユーザーが新しいルートにアクセスする権限を持っていることを確認する必要があります。

Laravel では、これは次の方法で実現できます。

ミドルウェア承認

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'))
        ]);
    }
}
ログイン後にコピー

summary

Laravel アプリケーションでは、承認はユーザーのセキュリティとデータ保護を確保するための重要な部分です。ミドルウェアまたは書面による承認を使用してアクセスを承認し、ユーザーを新しいルートにリダイレクトする前にユーザーのアクセスを保証できます。ミドルウェアは最も一般的に使用される認証方法ですが、書面による認証ではより詳細な認証チェックを行うことができます。アプローチに関係なく、Laravel は認可とアクセス制御をサポートするさまざまなメカニズムを提供します。

以上がLaravelの認可管理を説明する例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート