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')}」があり、これは主にテストに用いられる.見てみろ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」の2つの条件が満たされなければ、そのテキストボックスが表示されません!!
target=="insertname"がないとプログラムがエラーを報告します!!
action=「insert」がなければテキストボックスも見えません!!
なお、これは、データベースの手動構成ではなくsecurityを介してJPAの高度な権限検証である.drlファイルで制御されます.データベースのpermissionテーブルを構成して権限を制御したい場合は、ログイン時にpermissionオブジェクトをロードしてWorkingMemoryに置く必要があります.この部分の内容は前の記事ですでに述べています.!!