我正在使用Extension Library Managed Bean“UserBean”。我正在尝试使用userBean测试面板的ACL属性的简单证明。然后我在页面上有三个面板,其中包含文本。这是其中一个小组。
显示我当前的角色。
<xp:text escape="true" id="computedField3" value="#{javascript:return userBean.accessRoles.toString();}"></xp:text>
<xp:panel id="panelMarketing" style="border:1px solid red;">
<xp:this.acl>
<xp:acl>
<xp:this.loaded><![CDATA[${javascript:var roles = userBean.accessRoles.toString();
return roles.contains("[MARKETING]");}]]></xp:this.loaded>
</xp:acl>
</xp:this.acl>
<xp:label value="I'm in Marketing" id="label2"></xp:label>
</xp:panel>
我加载了页面,而我分配了3个角色。面板显示。删除角色后,所有面板仍会显示,返回用户角色的文本字段仍显示ACL中分配给我的旧角色。像UserBean这样的接缝不会再次读取ACL。
然后我尝试CTRL F5,仍然没有。然后我打开另一个浏览器,登录到应用程序,仍然是相同的角色。关闭浏览器,重新登录,不做任何更改。
是否有刷新时间或强制userBean更新用户ACL角色的方法?
第二天我重新登录,UserBean反映了我的更改。我做了另一个更改,UserBean没有反映更改。
答案 0 :(得分:0)
对于acl添加一个aclEntry并且不对已加载的属性进行编码,如此...
<xp:panel id="panelMarketing" style="border:1px solid red;">
<xp:this.acl>
<xp:acl>
<xp:this.entries>
<xp:aclEntry right="READER" type="ROLE">
<xp:this.name><![CDATA[[MARKETING]]]></xp:this.name>
</xp:aclEntry>
</xp:this.entries>
</xp:acl>
</xp:this.acl>
<xp:label value="I'm in Marketing" id="label8"></xp:label>
</xp:panel>
答案 1 :(得分:0)
通过阅读Extension Library一书(参见第464页)和userBean实现的源代码,似乎userBeans缓存在应用程序范围内,默认缓存大小设置为100(因为您可以使用userBean访问其他详细信息)用户而不仅仅是当前用户。)
userBean与在会话中进行身份验证的用户一起使用。因此userBean基本上是Java中peopleBean.getPerson()的快捷方式。
peopleBean类有一个refreshPerson(id)方法和一个clearcache(id)方法。尝试使用其中一个来强制peopleBean / userBean通过执行peopleBean.refreshPerson(@UserName())
或peopleBean.clearcache(@UserName())
来刷新。
答案 2 :(得分:0)
我知道这是2年前,但我遇到了同样的问题,并决定进一步调查。
事实证明,底层clearCache(String id)方法中有几个错误,它应该清除单个缓存条目(例如一个人)。因此,在应用程序,会话或请求范围缓存上使用时无效。 (它确实适用于全局缓存,所以我怀疑这是他们测试的唯一一个)。
我已经向扩展库提交了pull request来修复clearCache(字符串ID)方法,所以希望它能够被下一个版本接受!
清除所有条目的clearCache()方法 工作,所以你总是可以尝试
peopleBean.clearCache();
这应该有用(它对我有用)然而它清除了每个人不应该是一个大问题,他们只会再加载我猜。