簡體   English   中英

在流明中創建多個Auth Provider

[英]Creating Multiple Auth Providers in Lumen

我正在嘗試為我的API創建多個Auth Guard和服務。 我希望特定的組對特定的用戶可用(更像是沒有會話的RBAC)。

如果用戶嘗試訪問具有admin:auth作為中間件的組,則將檢查其特權。 如果它具有api:auth則沒有特權檢查。

我不明白該怎么做。 我在bootstrap / app.php中添加了以下幾行

$app->routeMiddleware([
    'admin' => App\Http\Middleware\Admin::class,
    'api' => App\Http\Middleware\Api::class,
]);

和:

$app->register(App\Providers\AdminServiceProvider::class);
$app->register(App\Providers\ApiServiceProvider::class);

並在Middleware文件夾中創建了具有以下內容的文件Admin.phpAPi.php (與更改名稱的Authenticate.php基本相同)

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\Factory as Auth;

class Admin
{
    /**
     * The authentication guard factory instance.
     *
     * @var \Illuminate\Contracts\Auth\Factory
     */
    protected $auth;

    /**
     * Create a new middleware instance.
     *
     * @param  \Illuminate\Contracts\Auth\Factory  $auth
     * @return void
     */
    public function __construct(Auth $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if ($this->auth->guard($guard)->guest()) {
            return response('Unauthorized.', 401);
        }

        return $next($request);
    }
}

App \\ Providers文件夾中的AdminServiceProviderApiServiceProvider在功能boot()中只有這個:

var_dump($this->app['api']);exit;

這是最重要的:

namespace App\Providers;

use App\User;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;

class ApiServiceProvider extends ServiceProvider

但是我收到以下錯誤:

錯誤

我想念什么? 我已經做過composer dump-autoload ,沒有區別。

問候

好吧,我最終使用的東西更像是一種變通方法,但是我認為這可能是應該使用的方式。

因此,我要做的就是使用所需的中間件創建了兩個組(父母和孩子),如下所示:

$app->group(["middleware" => "middleware1"], function() use ($app){
  $app->group(["middleware" => "middleware1"], function() use ($app){
    $app->post("/signin", "AppController@signin");
  }
}

這樣,在經過2個中間件之后便達到了signin路徑。

問候

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM