Я хочу :
/p/{name} ==> in public access
/profile ==> in loggin access
Я сделал это в безопасность.yml
access_control:
- { path: ^/[p]/* , role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/*, role: ROLE_CONNECT }
Но, когда я просматриваю:
/профиль => общедоступный ==> К.О.
/p/имя-здесь => общедоступный ==> Ok
/profile доступен публично, поэтому он KO (нехорошо), потому что я хочу этот маршрут только тогда, когда пользователь вошел в систему
Мне это показалось довольно ясным, и я думаю, что композитор использует OK для успеха и KO для ошибки (KO не в порядке). Кроме того, проблема четко сформулирована непосредственно перед этим.






Я почти уверен, что ^/[p]/* будет соответствовать любому пути, который начинается с /p, и у вас есть это первое правило, поэтому оно соответствует первому и разрешает доступ.
Квадратные скобки [] определяют набор символов для сопоставления, вы хотите сопоставить только один, поэтому они вам не нужны. * говорит, что нужно совпадать с нулем или более / символов в конце, вы знаете, что после / будет один p, поэтому опустите звездочку. Путь является префиксом, поэтому вам не нужно беспокоиться о переменной части пути.
Попробуй это:
- { path: ^/p/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/profile, role: ROLE_CONNECT }
Пожалуйста, отформатируйте свой вопрос. «К.О.» для нас не является сообщением об ошибке. Добавьте свой маршрут, полный
security.ymlи сообщение об ошибке, которое вы получаете, когда переходите к/profile. Если бы вы также могли добавить тег, соответствующий вашей версии Symfony, это было бы идеально.