`

JPA高级权限验证之security.drl如何写

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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics