在 Lumen 中创建多个 Auth Provider
Creating Multiple Auth Providers in Lumen
我正在尝试为我的 API 创建多个 Auth Guards 和服务。我希望特定组对特定用户可用(更像是没有会话的 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);
并在 中间件[=49] 中创建了文件 Admin.php 和 APi.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);
}
}
而 AdminServiceProvider 和 ApiServiceProvider 在 App\Providers 文件夹中这在函数 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
路由
此致
我正在尝试为我的 API 创建多个 Auth Guards 和服务。我希望特定组对特定用户可用(更像是没有会话的 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);
并在 中间件[=49] 中创建了文件 Admin.php 和 APi.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);
}
}
而 AdminServiceProvider 和 ApiServiceProvider 在 App\Providers 文件夹中这在函数 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
路由
此致