如何根据角色和权限将15 -swagger文档限制给用户?



我在15 -swagger配置中添加了中间件,并试图打印出用户对象,但它返回null。

是否有可能限制特定的或所有API/文档生成的swagger使用角色和权限定义在Laravel内部?

编辑这是中间件,这里没有什么特别的。我只是想检查用户是否存在,但是失败了。

<?php
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
class ApiDocumentationAuthCheck
{
/**
* Handle an incoming request.
*
* @param  IlluminateHttpRequest  $request
* @param  Closure(IlluminateHttpRequest): 
(IlluminateHttpResponse|IlluminateHttpRedirectResponse)  $next
* @return IlluminateHttpResponse|IlluminateHttpRedirectResponse
*/
public function handle(Request $request, Closure $next)
{
dd(Auth()->user());
// if auth User allow access to API
return $next($request);
// else redirect to Login route with auto redirect back

}
}

在15 -swagger配置中,我像这样设置中间件

'middleware' => [
'api' => ['ApiDocumentationAuthCheck'],
'asset' => [],
'docs' => [],
'oauth2_callback' => [],
],

无论您是否登录,您的用户返回null都是正常的,因为15 -swagger文档的路由是分开处理的(意思是:它们不通过web或api路由),这意味着没有预定义的中间件(包括处理身份验证的中间件)

要使它工作,你需要把所有的中间件用于你的路由:默认为web或api

'middleware' => [
'api' => [
'api', // or 'web' if you are using web routes
'ApiDocumentationAuthCheck',
],
'asset' => [],
'docs' => [],
'oauth2_callback' => [],
],

现在可以访问Auth::user()

注意:这里的顺序很重要,因为请求按顺序通过中间件,默认中间件用于检查会话并在必要时初始化它们。

在我的例子中,我测试如果用户没有身份验证,那么我验证它:

$user = Auth::user(); //get authenticated user
if (empty($user)) { //if no user is authenticated then manually log him
return response()->redirectTo("/api/login?intended=/api/documentation");
}
if ($user->role == 'admin') {
throw new UnauthorizedException("You do not have the necessary access to perform this action (Documentation Access).");
}

相关内容

  • 没有找到相关文章

最新更新