1.UsersEdit.xhtml
<s:decorate id="realnameField" template="../layout/edit.xhtml">
<ui:define name="label">Realname</ui:define>
<h:inputText id="realname" required="true"
size="50"
maxlength="100"
value="#{user2.realname}" rendered="#{s:hasPermission('insertname', 'insert')}">
<a:support event="onblur" reRender="realnameField" bypassUpdates="true" ajaxSingle="true"/>
</h:inputText>
</s:decorate>
在这里有个rendered="#{s:hasPermission('insertname', 'insert')}",这个主要是用来测试的。看在security.drl文件中如何写,才能满足这样的条件。
2. security.drl
rule InsertTest
no-loop
activation-group "permissions"
when
check: PermissionCheck(target == "insertname",action == "insert",granted == false)
Role(name == "admin")
then
check.grant();
end
这样的话就只有admin的用户才有这样的权限了。另外必须target == "insertname",action == "insert"这两个条件都满足的话,就可以看到那个文本框了!!
如果没有target == "insertname"则程序会报错!!
如果没有action == "insert"则也会看不到文本框!!
另外说明一点:这是JPA的高级权限验证的,即没有通过数据库的手工配置而是通过security.drl文件来控制的。如果想通过配置数据库的permission表来控制权限的话,就必须在登录的时候把permission对象加载出来,然后放到WorkingMemory中,这部分的内容在前面的文章里面已经讲过了。!!
本文介绍了一种基于JPA的高级权限验证方法,利用security.drl文件动态控制UI元素的可见性,确保只有具备特定权限的用户(如管理员)才能访问敏感功能。
804

被折叠的 条评论
为什么被折叠?



