Задать вопрос
  • Какая сущность в symfony security и Lexik JWT Bundle проверяет логин/пароль при входе?

    myks92
    @myks92
    Александр Афанасьев, это не дублирование настроек. Разные способы входа. А чтобы не дублировать время жизни токена выносите в env или parametrs. Название куки может не быть если у вас фронт не на Symfony. Если же всё таки на Symfony, то название тоже можно выносить. Принцип DRY у вас нарушен. В то же время при разных способах аутентификации он не нарушается. Знания не дублируются.
    Написано
  • Как по запросу пользователя правильно отдавать данные для администратора и гостя?

    myks92
    @myks92
    Boris007,
    Каким образом?

    Можно сравнивать ID, но в вашем случае запрос будет без передачи ID: example.com/profile. Внутри этого запроса из токена вы получаете ID авторизованного пользователя. Далее с этим ID получаете профиль пользователя из БД. То есть у вас не будет ссылки вида example.com/maxim007 в которой пользователь редактирует свой профиль. По ссылке example.com/maxim007 вы просто отображаете профиль, а по ссылке example.com/profile редактируете свой профиль. При этом вы можете сделать кнопку "Редактировать", которая ведёт на профиль редактирования

    const identity = getIdentity()
    
    if(identity !== null && profile.id === identity.id) {
      return <a href="/profile/edit">Редактировать профиль</a>
    }


    А если он зашел просмотреть чужую страницу, как гость и написать ему (кнопка написать находится на странице пользователей)

    Обычно написать гости не имеют возможности. А чтобы не было 403 страницы при отображении - разнесите на разные. Но если у вас пользователь гость, то вы скрываете кнопку, так как на клиенте у вас не будет токена и user будет равным null.

    const identity = getIdentity()
    
    if(identity !== null && profile.id !== identity.id) {
      return <a href="/message...">Написать сообщение</a>
    }
  • Как по запросу пользователя правильно отдавать данные для администратора и гостя?

    myks92
    @myks92
    Boris007, если говорить о сервере, то ему с запросом нужно передавать в header этот токен. В принципе как и обычно с другим токеном. Данный токен сервер не сохраняет себе в куки или ещё куда-либо. Он просто проверяет его и если он валиден по структуре, подписи, и не просрочен, то авторизует пользователя в рамках одного запроса. Далее сервер проверяет есть ли у авторизованного пользователя роль admin. Если нет, то ошибка 403.

    Клиент же должен обрабатывать эту ошибку и показывать пользователю. Так же клиент может по условию показывать кнопку.

    Как понять серверу и клиенту, что на сервере нам надо отдать данные, которые разрешены только для гостя или для администратора

    Если у вас это публичные профили страницу можно отобразить всегда. А вот какие данные показать зависит от авторизованного пользователя. Обычно управление профилем пользователя и публичный профиль разные страницы. У вас вообще не должно быть возможности заменить url и отобразить чужой профиль. В данном случае с сервера вам должен прилетать только свой профиль или 401. Вы при этом передаете только токен.

    Кнопку добавить в друзья вы отображаете в зависимости от того есть ли у вас JWT токен в куках, далее он валиден и не просрочен. Если всё это success, то у вас пользователь авторизован. Вы можете добавить к себе в друзья. При этом надо не забыть проверку на то что это это ещё профиль не ваш.
  • Как по запросу пользователя правильно отдавать данные для администратора и гостя?

    myks92
    @myks92
    Boris007, не просто access_token, а именно формата JWT. При входе он должен создаваться вместе с RefreshToken. AccessToken имеет срок действия, обычно до 15 минут. Как заканчивается - получаете новый с помощью RefreshToken. И у вас новый AccessToken. Таким образом достигается безопасность.

    JWT токен позволяет без запроса на сервер аутентификации получить полезную нагрузку, которая включена в этом токене. Чаще всего в неё включаются данные User и его роли. Декодировав этот токен вы можете использовать эти данные.

    Лучше почитайте о данном токене.
  • С чего начать планирование системы управления кафетериями?

    myks92
    @myks92
    Drno, результат работы архитектора это схемы в Miro или Lucid, различная техническая документация, расчёты, разработка задач, планирование с точностью до часов их реализации, выбор стека для разработки и так далее. В целом можно почитать. Не думаю, что Вы полностью взяли на себя роль Архитектора ПО. Скорее всего вы просто имеете небольшой проект, где приходится делать многие, то есть совмещать, в том числе и работу Архитектора. При этом вы вряд ли даже делаете расчёт доступность сервисов, различные диаграммы, техническую документацию и т.д. На небольших проектах на это всё забивают.

    1. Либо "сборка" впн сервиса под «ключ"
    Тут не понятно что имеется ввиду. Он может иметь продажи этих ВПН, а может и не иметь. В общем тут нюансов много. Но в целом похоже как раз на работу сис админа.

    2. Портал авторизации Бота не особо требует Архитекторских знаний. В целом тоже больше под программиста смахивает.

    насчет облака и "сами смогут" - возможно у нас разные програмисты и заказчики, я пока таких не встречал))

    Если мы говорим о Backend Developer уровня Middle и Senior, то он вполне себе не то что бы сможет, а должен. Хотя бы подготовить себе среду для разработки. А вот на счёт заказчиков всё не однозначно. У меня был заказчик, который строил себе сервера крупные и у него была система развернута на ПО, за которое он платил 280 тысяч в год. При этом полностью сам всё делал и вносил мелкие правки в код. В основном по тексту UI. Другой заказчик сам развертывал базу в Digital Ocean и вообще не давал доступ к ней, так как боялся за безопасность. Он же самостоятельно настраивал CDN для своего сайта через Selectel. Проекты до сих пор живут. Так что такие заказчики есть. Другое дело у Вас их нет. Но я регулярно сталкиваюсь. В целом я и сам во всём разбираюсь. Постоянно совершенствуюсь. Это интересно.
  • С чего начать планирование системы управления кафетериями?

    myks92
    @myks92
    Drno, обслуживание полностью Яндекса, если о внутреннисиях говорим. А о настройке да, но сделать это на много проще. Любой программист сможет. И возможно даже сам клиент. Не просто так за это берут больше денег, чем настраивали бы сами) В этом и суть облака.

    Если вы исполняете роль архитектора, то да. Схороните архитекторы берут много. Я знаю таких лично. Но и ответственность на них совершенно другая, а не сравнимая сис админом. В общем то за это им и платят больше. Можно делать всё что делает Архитектор, при этом не отвечать за всё наделанное. Тогда и получает как обычный программист. На маленьких проектах зачастую вообще один программист сочетает в себе все функции и front dev и back dev и design dev …
  • С чего начать планирование системы управления кафетериями?

    myks92
    @myks92
    Drno, Вы как раз говорите всё то, что делает Архитектор ПО) Пишите вы более менее правильно, но путаете специалистов. Возможно в Вашей команде был человек которого все называли сис админом, но он выполнял несколько функций. Я ещё раз говорю, что проект может быть в облаке и какую систему он тогда там будет настраивать) В Amazon Yandex всё делается через UI интерфейс, например. Чтобы развернуть базу надо просто указать размер хранилища и другие настройки, которые делаются через UI и у вас уже готовая база данных. При этом Ваша база будет очень надёжная, быстрая, отказоустойчивая, может легко масштабироваться и так далее. Сис админу же нужно будет всё это делать в ручную.
  • С чего начать планирование системы управления кафетериями?

    myks92
    @myks92
    kamandor, грамотность касается всех членов команды продукта, а не только именно его) Иначе смысл этой работы. Если будет не грамотный дизайнер, то он сделает плохой UI/UX, которым будет неудобно пользоваться. Если у вас будет плохой программист, то он может где-то ошибиться и деньги будут идти не туда, куда надо.

    Автор ответа предлагает спросить с чего начать планирование подобной системы у сис админа. Это точно не то, с чего нужно начинать. Здесь суть заключается в том, что любого специалиста, в том числе и сис админа, можно будет заменить, если он не справляется или делает не качественно. А вот если изначально была заложена неправильная архитектура тут уже придётся менять многое. Архитектор - это проектировщик домов, разработчик - это строитель этого дома, а сис админ всего лишь обслуживающая компания.
  • С чего начать планирование системы управления кафетериями?

    myks92
    @myks92
    Drno, я не спорю, что специалисты должны быть хорошие. Но причем тут сис админ? Если на этапе проектирования спроектируют такой проект, который не масштабируется, то тут хоть какой будет сис админ он не сделает из этого микросервисы. При плохой архитектуре всё это будет работать очень печально с хорошими нагрузками. Никакой сис админ тут не поможет.

    Системный администратор, или админ — это специалист, который поддерживает бесперебойную работу и безопасность сайта, приложения, локальной сети компьютеров и всего ПО внутри компании.

    Основные задачи системного администратора: Установка, настройка и обновление операционных систем Windows и Linux (в IT-командах востребована вторая), а также другого ПО и инфраструктуры, необходимых для работы компании.

    Системный админ, например, не ответит на чем писать каждый сервис. На go, php, Java… Какой выбрать фреймворк и библиотеки. Сис админ работает с установкой всего этого, а не с выбором всего этого в зависимости от задачи. Он так же как и программист сделает как ему удобно. Ему плевать на то, что код станет не поддерживаемый, потому что в нем заложен CRUD подход в разработке, а не DDD. У сис админа нет задачи снизить расходы на разработку и поддержание этого ПО. На все эти вопросы отвечает Архитектор ПО (Software Architect). Возможно вы имели его? Тогда соглашусь с вами.
  • С чего начать планирование системы управления кафетериями?

    myks92
    @myks92
    Не очень понимаю причем тут сис админ в проектировании системы…) Можно ещё спросить тогда у дизайнера, который все это будет рисовать. Сис админ это всего лишь одно звено. И то это можно отдать на аутсорсинг.
  • Как получить имя кнопки типа submit в форме?

    myks92
    @myks92
    А код вы не хотите показать? Может быть у вас форма react-hook-form, а может и простой html.
  • Как хранить логи приложения на php?

    myks92
    @myks92 Куратор тега PHP
    bestauction, такого опыта нет, но статьи есть.
  • Какие архитектурные решения можно применить?

    myks92
    @myks92 Куратор тега PHP
    Арамаис Мирзоян, по компаниям сложно сказать. Каждая компания преследует свои цели. Какая-то может вообще не дать обратную связь, а какая-то возьмет вас и будет обучать пробелам в знаниях. Прежде чем делать тестовое задание нужно знать цели этого задания и критерии. Кроме того вам могут дать отпуску, а по факту просто нашли уже человека. Я к тестовым заданиям отношусь с осторожностью. Если их оплачивают, то могу рассмотреть, а если нет - я предпочту пропустить. Для того чтобы понять мой уровень достаточно посмотреть открытый код.

    Заказчик всегда ищет вариант проще. Я даже встречал таких, кому экономили 3млн за разработку продукта, а они, вместо того чтобы пустить на поддержку и развития продукта просто куда-то проели. Так что сэкономив компании 3млн заказчик всё равно скажет, что у него нет денег на ваши хотелки. Тут работа с клиентами и ценностью.
  • Какие архитектурные решения можно применить?

    myks92
    @myks92 Куратор тега PHP
    Арамаис Мирзоян, что касается ТЗ, то тут вы сами должны принимать решения, в том числе и архитектурные. Заказчик не знает ничего про это. И если вы ему предложите выбор по лайту и без ддд, то он быберет что дешевле и проще.

    Да ссылок тут не напасешься. Из много. Про ддд думаю и сами найдете. Теория есть вся в интернете. Хабр в помощь. А вот практика дело другое. Могу поделиться своим открытым шаблоном для проектов на Symfony https://github.com/Myks92/project-feature-skeleton

    Ну или если что пишите в телеграм. По возможности отвечу
  • Какие архитектурные решения можно применить?

    myks92
    @myks92 Куратор тега PHP
    Арамаис Мирзоян, учитесь понимать) Либо не работайте с такими проектами. Тут уже выбор ваш. Я лишь поделился мнением.

    Если вы пишите тесты, то наверняка сталкивались с проблемой написания тестов для сущности. Вместо того чтобы написать простой и быстрый Unit Test вам приходиться писать функциональный тест с Фикстурами. Из-за чего ваши тесты выполняются на много дольше. При больших обьемах это могут быть и часы. Вот вам и причина почему сущность не должна ничего знать про место хранения. Вот вам и «громоздкая архитектура». А получилось громоздкое тестирование. Так что не думайте что упростили свой код и проект таким образом. Жить можно и без DDD можно и на лошадях ездить. Ваша задача применять эти знания. Вам вряд ли придет в голову ехать за 1000 км на лошадях. Вот и тут не нужно говорить о том что это громоздко. Применяя DDD вы код читаете как книгу и если вы вернетесь к проекту через год - вы легко в него погрузитесь и внесете нужную правку. А вот без него вы будете часами искать и дебажить.
  • Какие архитектурные решения можно применить?

    myks92
    @myks92 Куратор тега PHP
    Арамаис Мирзоян, небольшое отступление… Slim - это всё же микрофремворк. Laravel и Symfony - компонентный фреймворк. Yii2 - монолитный фреймворк. Например, у Symfony тоже есть возможность использовать его минимально - вот его скелетон.

    Теперь ответы на вопросы:
    Есть ли смысл сделать фреймворканезависимую атхитектуру, используя такое тяжелое решение, как Laravel?
    Есть. Деление на слои это вообще не про фреймворки. Если Вы считаете обратное, тогда почему вам в сущность User сразу не кидать Request. Доставать из него нужные данные и сохранять в базу. Но почему-то так не делают. Потому что нижний слой не должен зависеть от верхнего. Сущность - это Ваша модель бизнеса. Если поместить туда вещи от фреймворка, то тогда это может вводить в заблуждение. Так же это ненужная зависимость. Предположим вы прокинули Request сразу в User. Тогда при любом изменении контракта Request - вам придётся менять это во всех сущностях. Так же Request есть в Web, но нет в Console. Кроме того ваши данные вообще могут быть загружены по API из стороннего сервиса через Guzzle. Тогда фреймворк ваш вообще ни каким боком не упал. Или вы захотите выделить систему Auth в микросервис. Если вы программировали изначально зависимую систему, то вам это будет сделать сложно. К тому же есть и другие проблемы. Вот Yii2 перестал развиваться. Yii3 ещё не вышел. И вы стали ограничены в развитии. Чтобы перейти на новый фреймворк - вам нужно отвязать ваш код от фреймворка, затем перенести на новый фреймворк и уже там накинуть инфраструктуру на ваш код. Описал сумбурно и точечно, но суть должна быть ясна.

    По сути из всего прекрасного функционала Laravel будем использовать только руты, но при этом тянуть с собой всю эту обузу, в виде лишнего кода, как я понимаю.
    Вам никто не запрещает использовать не только рауты. Сделайте свою обётрку и вам вообще не важно какая там зависимость. Этот же Mailer в проекте будет иметь MailerInterface в качестве контракта и реализацию LaravelMailer, SymfonyMailer, UnisenderMailer и так далее.

    В этом случае вам стоило бы ещё отметить в проектах какого масштаба стоит применить столь громоздкую архитектуру, а в каких лучше обойтись средствами фреймворка. Предполагаю, что для такого архитектурного решения должна быть жесткая необходимость.
    Если проект будет жить больше года и в нём не пару строк кода, то лучше сразу применять. Она вообще не громоздкая. Вам так кажется. Вам будет проще жить с этим. Будет меньше ошибок. Представьте контроллер на 15 строк кода или на 1500. Тут вам решать. Жёсткая необходимость заключается в развитии. Если оно есть - это уже ваш критерий. Единственное вам может казаться что она громоздкая только потому что вы плохо в ней ориентируетесь и мало что знаете про это. По таким суждениям тогда и не нужны лишние библиотеки, вроде Psalm, PHPUnit, Rector, Deptrac, PHP CS Fixer и так далее. Зачем вообще себя утруждать писать лишний код в тестах, какую-то типизацию делать в проекте)) Слишком громоздко… И так сойдёт.
  • Какие архитектурные решения можно применить?

    myks92
    @myks92 Куратор тега PHP
    Арамаис Мирзоян, фреймворк не играет роли в вашем случае. Фреймворк это инфраструктура. А бизнес логика и сервисы пишутся на PHP либо имея минимальные зависимости.
  • Какие архитектурные решения можно применить?

    myks92
    @myks92 Куратор тега PHP
    Елена, всё верно. Active Record тем и плох, что это не контролируемо. Тоже самое у Yii. Вы можете в любом месте вызвать публичное поле $user->status = 'active' и пользователь стент активирован. И разработчику плевать о том, какую логину переходов из статуса в статус вы заложили. Например, для User вы можете поставить условие, что пользователя можно активировать только в том случае, если его почта подтверждена. Для этого в методе activate() вы добавляете проверку подтверждения. Если не подтвердил - выбрасываем исключение. Таким образом ваша система и сущность User всегда соблюдает бизнес требования. Вы защищены от вмешательств через публичные поля. Кроме того в этом же методе activate() можно опубликовать событие для другого модуля, который пришлет приветственное письмо с дальнейшими инструкциями. Если изменять статус напрямую ничего этого не будет.

    Да, я вижу ваш акцент на то, что придётся городить дополнительные аннотации, писать правильные методы и отделять хранилище репозиторием. Но я ещё ни разу не видел проблем от этого. Проблемы бывают с Active Record. Он полезен только на старте, а дальше он дает кучу проблем. Если ваш проект надолго, а не какой-то стартап, то писать лучше не с антипатерном Active Record. Вы всё равно придёте к этому. Вопрос только времени.
  • Почему Doctrine ORM удаляет сущности, когда symfony работает в режиме message:consume?

    myks92
    @myks92
    Нужно поделиться кодом на гитхаб. Из того что описано вообще не понятно. Тем более по одному простому методу. Соберите минимальный код с проблемой и вышлите ссылку с ссылками на строки. Вряд ли это доктрина чудит. Скорее всего где-то запускается ещё какой-то код, который удаляет.