Я немного поигрался с PHP массивами и JSON, и когда я пытался "разработать" промежуточное ПО для контроля доступа пользователей к определенным страницам моей системы, появилась эта ошибка:
Неопределенный индекс: доступ
Это пример моего кода;
$arrKey = "company_id";
$id = 1;
$json = '{"access":[{"company_id":1,"role_id":3}, {"company_id":2,"role_id":4}]}';
$array = (array)json_decode($json, true);
/*
This is the array from the JSON
Array
(
[access] => Array
(
[0] => Array
(
[company_id] => 1
[role_id] => 3
)
[1] => Array
(
[company_id] => 2
[role_id] => 4
)
)
)
*/
foreach ($array['access'] as $key => $val) {
if ($val[$arrKey] == $id) {
return $key;
}
}
Я даже пытался обойти что-то подобное
$array = (array)json_decode($json, true);
$array = $array['access'};
Но та же ошибка появилась снова. Для получения дополнительной информации я использую Laravel 6, моя PHP версия - 7.3.9, и вот весь мой код:
<?php
namespace App\Http\Middleware;
use Request;
use Closure;
use App\Models\Role;
use Route;
class CheckRole
{
public function getRoute()
{
if(is_numeric(Request::segment(1)))
return Request::segment(2);
return Request::segment(2);
}
public function getRoleId()
{
return Request::user()->id;
}
public function getRole()
{
/*
Request::user()->companies return:
{
"access":[
{
"company_id":1,
"role_id":3
},
{
"company_id":2,
"role_id":4
}
]
}
*/
return $this->searchForId($this->getCompanyId(), Request::user()->companies, 'company_id');
}
public function getCompanyId()
{
return Request::segment(1);
}
public function searchForId($id, $json, $arrKey) {
$array = (array)json_decode($json, true);
foreach ($array['access'] as $key => $val) {
if ($val[$arrKey] == $id) {
return true;
}
}
return false;
}
public function checkAccess()
{
if(is_numeric(Request::segment(1)))
{
return $this->searchForId($this->getRoleId(), $this->getRole(), "company_id");
}
return true;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(!$this->checkAccess())
{
return redirect("/");
}
return $next($request);
}
}
Код не завершен, после этой ошибки начал появляться, я остановил все, чтобы (попытаться) решить эту ошибку, и я почти заменяю "JSON" на "serialize", я протестировал его и работал просто отлично, но я думаю, что это не лучший вариант потому что, возможно, в будущем я собираюсь заново создать весь свой проект с Python / NodeJS API и ReactJS, чтобы использовать его, и JSON будет лучшим вариантом.