You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.2 KiB
54 lines
1.2 KiB
|
6 months ago
|
<?php
|
||
|
|
|
||
|
|
namespace App\Http\Middleware;
|
||
|
|
|
||
|
|
use App\Helpers\ApiResponse;
|
||
|
|
use App\Helpers\StarterResponseCode;
|
||
|
|
use Closure;
|
||
|
|
use Illuminate\Support\Facades\Auth;
|
||
|
|
use Illuminate\Support\Str;
|
||
|
|
|
||
|
|
class Rbac
|
||
|
|
{
|
||
|
|
use ApiResponse;
|
||
|
|
|
||
|
|
public $guardName;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Handle an incoming request.
|
||
|
|
*
|
||
|
|
* @param \Illuminate\Http\Request $request
|
||
|
|
* @param \Closure $next
|
||
|
|
* @return mixed
|
||
|
|
*/
|
||
|
|
public function handle($request, Closure $next, $guard = "admin")
|
||
|
|
{
|
||
|
|
$this->guardName = $guard;
|
||
|
|
|
||
|
|
if (!$this->checkPermissionByUrl()) {
|
||
|
|
return $this->fail(StarterResponseCode::RBAC_FAIL);
|
||
|
|
}
|
||
|
|
return $next($request);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 权限校验
|
||
|
|
* @param $request
|
||
|
|
* @return bool
|
||
|
|
*/
|
||
|
|
public function checkPermissionByUrl()
|
||
|
|
{
|
||
|
|
$user = Auth::guard($this->guardName)->user();
|
||
|
|
$permissions = $user->getAllPermissions();
|
||
|
|
//校验权限
|
||
|
|
foreach ($permissions as $permission) {
|
||
|
|
if (!$permission->api_prefix) continue;
|
||
|
|
if (Str::startsWith(request()->route()->uri(), $permission->api_prefix)) {
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|