1. JavaScript / Говнокод #19856

    +7

    1. 1
    2. 2
    3. 3
    4. 4
    function checkPermission(user, post) {
      return equals(post.author, user) ||
             user.role = 'admin';
    }

    when you see it, you'll shit bricks

    Запостил: thepotato, 21 Апреля 2016

    Комментарии (17) RSS

    • вопрос в догонку: это клиент- или сервер-сайд? потому что если клиент-сайд...
      Ответить
      • то что?
        может по этому role потом клиент принимает решение показывать или нет тыцки "редактировать", "удалить" и т.д.?

        всё равно по ним должен уйти post на бек, который есесно сам проверит разрешения на эти операции, и даст по рукам 403
        Ответить
        • > который есесно сам проверит разрешения

          а вдруг они все сделали правильно и у них код реюзается?)
          Ответить
          • я не силён в js и не вижу подвоха, поясни

            если говорить конкретно про указанные 3 строчки и закрывающую скобку, то я вижу другие проблемы - должны быть права доступа (а-ля "read", "edit", "delete" и т.д.), а не bool результат, роль это лишь мета сущность аггрегации прав
            Ответить
            • ты пропустил строку 3? где пользователям раздаётся роль админа? или я не понял твоего вопроса?
              Ответить
              • ах вот оно чо
                найдите синтаксическую ошибку называется, я то думал
                а какой приоритет операций в js?
                Ответить
                • '&&' стоит выше чем '='

                  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

                  ты типа намекаешь что должно быть синтаксической ошибкой?

                  я тоже по современному JS не спец.
                  Ответить
                • при чем тут приоритет, приоритет чего перед чем ? Тут один логич. оператор, или. 0\1 || 0\1.

                  Фишка в другом, если это фронтед и без проверки на бекенде - любой школьник присвоит user.role = 'админ'.

                  Ну и что за вотзефак equals
                  Ответить
                  • Эцсамое. Скорее всего действительно тут просто проверяется, показывать ли админские экшны; однозначно должна быть проверка на бэкенде. equals - может сравнивать юзеров по id, например (или сравнивать оба объекта по полям, это было бы говном). В общем, трудноуловимый запашок имеется, но вот так чтобы говно - так нет.
                    Ответить
                  • > приоритет чего перед чем
                    >> ты пропустил строку 3? где пользователям раздаётся роль админа?
                    = вместо ==

                    про любой школьник я уже написал в самом верхнем посте
                    клиент может дрочить всё что угодно, у него есть f12 и анонимные прокси
                    хоть вообще через фиддлер ресты вызывать руками, на беке ты обязан проверять всё
                    хуярить верификацию прав на клиенте может себе позволить только kerman
                    Ответить
                    • точно, монсиньор, пепел на мою детскую лысину второклассника. ==

                      шта за kerman ?

                      алсо, условие вывалится с ексепшеном.
                      Ответить
                    • а причем тут kerman?
                      Ответить
                    • Бгг, а причём тут kerman? )

                      BTW, проверка прав на клиенте - это один из основных недостатков всех двузвенных решений. Такое получается по причине наличия бизнес-логики в тушке толстого клиента и неотделимости проверки прав от логики.
                      Ответить
        • мне кажется, что для начала можно было бы тупо не рендерить кнопки для редактирования...
          Ответить
          • ну вообще я и подразумевал, что функция даёт ответ - рендерить или нет
            Ответить
          • сервер-сайд нынче не модно. модно подключить жабоскриптный темплейт энжин и на клиенте данные препроцесить.
            Ответить
    • JavaScript Не нужен
      Ответить

    Добавить комментарий