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