我正在编写一个简单的网页,其中显示了一些基于用户权限的小部件。如果用户具有EDIT权限,则页面呈现EDIT小部件,否则EDIT小部件不会显示。
实现这一目标的最佳方法是什么?
我首先调用服务来登录用户的权限,然后根据权限设置 visibility:none或block 。但是,我看到用户可以在浏览器上“检查元素”并相应地设置可见性。但是,在服务器端,我在DAO上使用@PreAuthorize注释来控制用户操作。
如何在用户无法进行更改的情况下控制UI小部件的可见性,可能来自服务器端?
更新:我正在寻找GWT中的JSTL等效
答案 0 :(得分:2)
AFAIK JSTL
没有等效GWT
但是,有一些第三方(即ArcIS)库可以更方便地根据用户权限显示/隐藏UI元素。
然而,无论您是手动执行还是使用库,都应确保正确保护后端(据我所知,通过使用方法级安全性可以确保这样做)。
处理客户端权限/安全性时要记住的一件重要事情:
您永远不应该信任来自客户端/浏览器的输入/操作,因为您无法控制它。因此,您必须始终在后端执行安全性
在我看来,只要后端的编辑操作得到妥善保护,用户是否可以使用浏览器开发工具进行理论检查编辑按钮并使其可见,这无关紧要。如果你真的那么担心,你可以从DOM
删除元素(即编辑按钮)而不是隐藏它,但它不会使它更安全。
答案 1 :(得分:0)
我首先调用一个服务来登录用户的权限然后 根据权限设置可见性:无或阻止。
假设您使用的是JSP,请使用JSTL标记
,而不是设置visibility none或block<c:if test="${if the user has permission}">Show widget UI code</c:if>
如果页面有n个用户没有权限的小部件,为什么要加载所有n个小部件的代码。这是不符合要求的。
答案 2 :(得分:0)
如前所述,并且您已经认识到,客户端安全性只是可见性控制,因此不足以保护应用程序。