Я работаю с GWT/RequestFactory и набором требований клиентов относительно разрешений. Позвольте мне объяснить основной пример:GWT RequestFactory: проверьте, были ли участники установлены без разрешения
Каждому пользователю присваивается компания. Каждый пользователь должен иметь возможность редактировать основные данные компании, но только, например, контактную информацию, веб-сайт и т. Д. Соответствующие безопасности, такие как BIC/SWIFT, IBAN, название компании и т. Д., Могут быть изменены только в том случае, если у пользователя есть определенное разрешение XY.
Насколько я знаю, на клиентской стороне я могу проверить разрешения и отключить эти поля, которые пользователь не может редактировать. Но что было бы самым элегантным способом обеспечить на стороне сервера, чтобы эти поля не были установлены без разрешения?
Моя проблема в том, что я не могу отслеживать изменения на стороне сервера. Наличие @PreAuthorize для каждого сеттера тоже не является опцией, потому что это закончится санкционированием-массовым убийством в каждой сущности.
В настоящее время я следую обходному пути: каждое поле, которое защищено/зависит от данного разрешения, передается как аргумент сущностному методу и исключается из прокси. Таким образом, значения не могут быть установлены с использованием прокси-сервера, и я могу проверить свой код сервера, если у пользователя есть разрешения. Если нет, ничего не происходит. Если у пользователя есть разрешения, я устанавливаю значения вручную. Но это создает множество сигнатур кода и уродливых методов, потому что количество значений, переданных методу, может стать большим.
Надеюсь, вы понимаете мою проблему. Я с нетерпением жду ваших мнений и советов. Заранее спасибо.
Спасибо за ваш ответ. Если я правильно понял ваше решение, вы не делаете никаких проверок безопасности на стороне сервера? Моя проблема заключается в том, что я не могу доверять клиентским данным, которые отправляются на сервер (и обычно вы никогда не должны!). Что делать, если запрос подделывается с помощью таких инструментов, как BURP? Поскольку вы отключите/спрятать поля в пользовательском интерфейсе, что не обязательно означает, что они не были отредактированы. Извините, если я ошибаюсь! Привет – grange
Да, это причина, потому что я дал вам второй вариант. В моем случае мои запросы не очень компрометируют, и у меня есть сервлет, который фильтрует все, плюс еще одну проверку безопасности. Итак, насколько я понимаю, безопасность - большой плюс для вас, что вы думаете о микшировании? ЕСЛИ пользователь не имеет доступа к некоторым полям, а не скрывает их отключение, а на сервере обрабатываются отредактированные поля в соответствии с ограничениями безопасности уровня? – apanizo
Это именно то, о чем мой вопрос: RequestFactory устанавливает значения объекта перед тем, как выполняется серверный метод. Таким образом, нет способа решить, имеет ли пользователь разрешения и в зависимости от того, установлены ли эти поля или нет. Единственный способ, которым я знаю, - это обеспечить сеттеры с проверками или, например, весна @PreAuthorize. Таким образом, я получаю исключение, если пользователь не должен изменять значения, но мне нужно было бы защитить каждый сеттер множеством полномочий для обработки всех случаев. И отключение или скрытие полей ui вообще не имеет никакого значения, просто бесполезно защищать от злоупотреблений ... – grange