10 changed files with 341 additions and 88 deletions
@ -0,0 +1,80 @@ |
|||
<?php |
|||
|
|||
namespace App\Http\Middleware; |
|||
|
|||
use App\Models\AdminRoleUsers; |
|||
use App\Services\AdminMenuService; |
|||
use App\Services\ApiResponseService; |
|||
use Closure; |
|||
use Illuminate\Http\Request; |
|||
use Illuminate\Support\Facades\Auth; |
|||
use Psr\SimpleCache\InvalidArgumentException; |
|||
use Symfony\Component\HttpFoundation\Response; |
|||
|
|||
class CheckPermission |
|||
{ |
|||
/** |
|||
* @param Request $request |
|||
* @param Closure $next |
|||
* @return Response |
|||
* @throws InvalidArgumentException |
|||
*/ |
|||
public function handle(Request $request, Closure $next): Response |
|||
{ |
|||
if (Auth::guard('sanctum')->check()) { |
|||
$action = $request->route()->getCompiled()->getStaticPrefix(); |
|||
$user = Auth::guard('sanctum')->user(); |
|||
$user_id = $user->id; |
|||
$uriArr = AdminMenuService::auth($user_id); |
|||
if ($this->passedOrNot($action, $uriArr)) { |
|||
return (new ApiResponseService())->error( |
|||
__('middleware.check.user_auth'), |
|||
400 |
|||
); |
|||
} |
|||
} |
|||
return $next($request); |
|||
} |
|||
|
|||
/** |
|||
* @param $action |
|||
* @param $uriArr |
|||
* @return bool |
|||
*/ |
|||
protected function passedOrNot($action, $uriArr): bool |
|||
{ |
|||
$characters = '/api/admin/'; |
|||
$action = ltrim($action, $characters); |
|||
|
|||
if (in_array($action, $uriArr)) { |
|||
return false; |
|||
} |
|||
|
|||
$methodArr = ['create', 'edit']; |
|||
$actionArr = explode('/', trim($action)); |
|||
$method = $actionArr[1] ?? ''; |
|||
$newAction = $actionArr[0] ?? ''; |
|||
|
|||
// 特殊 |
|||
if (in_array($newAction, ['logout', 'me'])) { |
|||
return false; |
|||
} |
|||
|
|||
// 特殊 |
|||
if (in_array($method, ['rule', 'import'])) { |
|||
return false; |
|||
} |
|||
|
|||
if ($method == $methodArr[0]) { |
|||
$newAction .= '/store'; |
|||
} elseif($method == $methodArr[1]) { |
|||
$newAction .= '/update'; |
|||
} |
|||
|
|||
if (in_array($newAction, $uriArr)) { |
|||
return false; |
|||
} |
|||
|
|||
return true; |
|||
} |
|||
} |
|||
Loading…
Reference in new issue