Ну и просто для комплекта, решение с использованием функций для работы с массивами
$permission = array_values(array_intersect($a, array_column($b, 'permission')))[0] ?? null;
array_column() сделает из $b нормальный массив, без этих бессмысленных "permission"
array_intersect собственно вернет пересечение двух массивов, все значения из $a, которые есть в $b.
теперь нам нужно самое первое значение из этого массива. Один из вариантов - это array_values()[0]
если нет совпадений, то при обращении к нулевому элементу будет ошибка, для её подавления используем сокращенный оператор проверки на существование, и присваиваем значение null