權限控制是每個項目必不可少的一塊。在最近的一個MVC模式(Struts)的實踐當中,在進行權限訪問控制時做了一個這樣的嘗試,即在action當中進行權限控制,它所控制的粒度可以到用戶的每個操作上,比如說增刪改查,當然,我這里所說的權限是控制到功能級的,系統還沒有復雜到對實例級別的控制。
具體的例子如下:先定義一個BaseDispatchAction,此類繼承Struts當中的DispatchAction,其中有個權限檢查的方法
protected boolean checkPermit(HttpServletRequest request, String funcId,String operationId)
funcId指的是當前的欄目,operationId為當前欄目的功能操作ID,將功能ID與操作ID在checkPermit方法當中與當前用戶所在的角色資源進行判斷,看是否符合當前操作。
比如具體到一個新增操作,可以在相對應的功能操作表中定義對應的操作ID。在接下來的具體某個action當中,先繼承BaseDispatchAction,比如用戶管理模塊的UserManangeAction。然后在新增方法當中加入如下代碼控制,
這樣,對具體的某個功能操作就進行了很好的控制。
具體的例子如下:先定義一個BaseDispatchAction,此類繼承Struts當中的DispatchAction,其中有個權限檢查的方法

funcId指的是當前的欄目,operationId為當前欄目的功能操作ID,將功能ID與操作ID在checkPermit方法當中與當前用戶所在的角色資源進行判斷,看是否符合當前操作。
比如具體到一個新增操作,可以在相對應的功能操作表中定義對應的操作ID。在接下來的具體某個action當中,先繼承BaseDispatchAction,比如用戶管理模塊的UserManangeAction。然后在新增方法當中加入如下代碼控制,
1
//判斷是否有此方法的操作權限
2
String funcId = httpServletRequest.getParameter("funcId");
3
if (checkPermit(httpServletRequest, funcId, Constants.QUERY)) {
4
return forwardError(actionMapping, httpServletRequest,"error.checkPermit");
5
}
6

2

3


4

5

6

這樣,對具體的某個功能操作就進行了很好的控制。