2012-10-04 130 views
4

我开始使用JSF 2.0和PrimeFaces的Web应用程序项目。其中一个要求是根据用户角色显示不同的页面内容。例如。只有管​​理员应该看到菜单项 - 用户管理。JSF - 基于角色的页面显示

安全方面,我会去春季安全。

这怎么能以优雅的方式实现?我应该为每个人制作一个xhtml模板,然后使用特定于角色的UI项目为每个角色创建不同的页面?

谢谢

回答

10

只需使用组件的属性rendered +角色检查,例如用于子菜单:在Spring中定义

<p:submenu label="#{msg['header.management']}" rendered="#{request.isUserInRole('INTERNO')}"> 
     <p:submenu label="#{msg['header.roles']}" icon="ui-icon-contact"> 
       <p:menuitem value="#{msg['header.newRole']}" url="/pages/addRole.jsf" /> 
      <p:menuitem value="#{msg['header.mngRoles']}" url="/pages/viewRole.jsf" /> 
</p:submenu> 

被 'INTERNO' 的作用。我认为这非常优雅。

要为pafe禁用导航(或一组网页),你仍然要拦截添加到您的spring-security.xml例如:

<intercept-url pattern="/pages/*Role*" access="hasRole('INTERNO')" /> 
+0

虽然正确,这并不阻止用户直接输入网址。总是使用web.xml来描述哪些角色可以访问哪些页面。并为您的业务层增加安全性。默默无闻的安全行不通。 – SJuan76

+0

我不认为它在这个问题的范围内,但我已经添加了关于如何解决用户直接访问URL的情况的附加信息。 –