在我们的项目中,我们在公司的内部网络中使用了JSF2页面。但我们打算将这些页面打开到Internet。所以每个人都可以使用这些页面。但是,如果用户来自Internet,则不会呈现某些字段。
我知道可以为每个组件编写一个呈现属性,例如“userIsInRole”。但额外的“渲染”控制似乎并不是高效而优雅的方法。因此,我计划使用自定义属性标记要在线呈现的组件,如下所示:
<h:inputText context="internet" />
...
在inputText或组件代码的渲染器中:
if(user is from Internet && context = "internet") {
return true; // or render... whatever
}
如果某个组件未标记为Internet,则表示该组件仅在公司内部可用(呈现)。
是否可以根据给定属性使用JSF2组件实现授权?还有更好的选择吗?或者我应该为互联网用户设计单独的页面吗?
我们在项目中使用:PrimeFaces + Spring。
谢谢
答案 0 :(得分:1)
这太荒谬了。最终使用
的努力有何不同?<h:inputText context="internet" />
与
<h:inputText rendered="#{intranet}" />
如果你唯一的问题是你需要重复整个条件,每次都是如此丑陋的代码
<h:inputText rendered="#{not (user.hasRole('internet') and context eq 'internet')}" />
<h:inputText rendered="#{not (user.hasRole('internet') and context eq 'internet')}" />
<h:inputText rendered="#{not (user.hasRole('internet') and context eq 'internet')}" />
...
然后只是将条件重构为单个请求范围的变量
<c:set var="intranet" value="#{not (user.hasRole('internet') and context eq 'internet')}" scope="request" />
...
<h:inputText rendered="#{intranet}" />
<h:inputText rendered="#{intranet}" />
<h:inputText rendered="#{intranet}" />
...