权限控制是每个项目必不可少的一块。在最近的一个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。然后在新增方法当中加入如下代码控制,
//判断是否有此方法的操作权限
String funcId = httpServletRequest.getParameter("funcId");
if (checkPermit(httpServletRequest, funcId, Constants.QUERY)) {
return forwardError(actionMapping, httpServletRequest,
"error.checkPermit");
}
这样,对具体的某个功能操作就进行了很好的控制。
具体的例子如下:先定义一个BaseDispatchAction,此类继承Struts当中的DispatchAction,其中有个权限检查的方法
protected boolean checkPermit(HttpServletRequest request, String funcId,String operationId)。
funcId指的是当前的栏目,operationId为当前栏目的功能操作ID,将功能ID与操作ID在checkPermit方法当中与当前用户所在的角色资源进行判断,看是否符合当前操作。
比如具体到一个新增操作,可以在相对应的功能操作表中定义对应的操作ID。在接下来的具体某个action当中,先继承BaseDispatchAction,比如用户管理模块的UserManangeAction。然后在新增方法当中加入如下代码控制,
//判断是否有此方法的操作权限
String funcId = httpServletRequest.getParameter("funcId");
if (checkPermit(httpServletRequest, funcId, Constants.QUERY)) {
return forwardError(actionMapping, httpServletRequest,
"error.checkPermit");
}
这样,对具体的某个功能操作就进行了很好的控制。