許可權之載入許可權資源
阿新 • • 發佈:2019-01-28
使用者登入成功進入如下的頁面:
主要是left.jsp許可權選單的載入
核心程式碼如下:
Jsp:
</head> <bodystyle="margin: 0"> <divid="Menu"> <ulid="MenuUl"> <%--顯示一級選單 --%> <s:iteratorvalue="#application.topPrivileges"> <s:iftest="#session.user.hasPrivilegeByName(name)"> <liclass="level1"> <divonClick="menuClick(this);" class="level1Style"> <imgsrc="style/images/MenuIcon/${id}.gif" class="Icon" /> ${name} </div> <ulstyle="" class="MenuLevel2" id="aa"> <%--顯示二級選單 --%> <s:iteratorvalue="children"> <s:iftest="#session.user.hasPrivilegeByName(name)"> <liclass="level2"> <divclass="level2Style"> <imgsrc="style/images/MenuIcon/${id}.gif" /> <atarget="right"href="${pageContext.request.contextPath}${url}.action">${name}</a> </div> </li> </s:if> </s:iterator> </ul> </li> </s:if> </s:iterator> </ul> </div> </body> <scripttype="text/javascript"> functionmenuClick(nemu){ $(nemu).next().toggle(); } </script>
注意:
1. value="#application.topPrivileges",從全域性範圍內獲許可權資料(通過自定義InitListener,啟動tomact就放入到全域性快取中,因為這些許可權資源基本不變;講在《許可權之快取》講到)。
2.test="#session.user.hasPrivilegeByName(name)",校驗使用者是否存在,我們在實體裡添了該驗證方法
3.其中包含樹的知識。
User:
/** * 根據名稱判斷使用者是否有訪問選單的許可權 */ publicboolean hasPrivilegeByName(String name) { //超級管理有所有的許可權 if(isAdmin()) { returntrue; } ActionContext.getContext().getSession().get("user"); //普通使用者要判斷是否含有這個許可權 for(Role role : roles) { for(Privilege priv : role.getPrivileges()) { if(priv.getName().equals(name)) { returntrue; } } } return false; }
即可獲得上圖。
小結:
1.構建樹的思路就是簡單的<ul><li></li></ul>實現樹形結構的。
2.載入許可權選單思路就時從快取中查詢該使用者擁有的許可權,然後在迴圈匹配所有許可權,即可得到我們可操作的選單和按鈕。