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中,这部分的内容在前面的文章里面已经讲过了。!!