Я управляю доступом к некоторым из моих статических веб-ресурсов с помощью некоторой логики PHP. Поскольку авторизация на основе каталогов через веб-сервер не подходит или просто невозможна.
Совокупность вещей определяет, будет ли доступ предоставлен или запрещен. И эти правила время от времени меняются.
В начале это было простое соответствие пути регулярного выражения и проверка одной переменной сеанса. Теперь все сложнее, так как задействовано еще несколько переменных.
Я задаюсь вопросом, как сделать рефакторинг, чтобы быстро и легко изменить правила. Когда это было просто «если это И это, то доставь, еще 403.» это было нормально делать на простом PHP. Теперь условия стали более сложными, и есть несколько уровней вложенности, каждый из которых имеет общие, но немного отличающиеся друг от друга условия. Это все достаточно просто для рефакторинга, но это не самый интуитивно понятный и простой в обновлении.
Я думаю об одной из двух вещей.
Установите классы для каждого из верхних уровней условий и используйте фабрику стратегий, чтобы выбрать правильную авторизацию. Получите их все из базового класса, содержащего общие биты, и перегрузите все, что необходимо. Я думаю, что это все еще может привести к некоторой перестановке, когда некоторые условия изменятся.
Создайте простой движок, который выполняет итерацию двумерного массива упорядоченных правил, вроде правил брандмауэра. Что-то вроде: <allow|deny>, <auth_group>, <path_regex>, <other vars>
Я не до конца продумал этот вопрос, но кажется, что его будет легче обновлять, а также читать как человека.
Что бы вы сделали? Есть ли для этого шаблон или библиотека, которую я могу использовать?
Я столкнулся с подобной проблемой в другом приложении некоторое время назад. Где я хотел легко обновить способ объединения правил и результатов, основанных на нескольких уровнях условий. Это не так сложно, как это приложение, но мне было бы интересно узнать о шаблонах, которые люди используют для решения такого рода проблем.