📄 authorizationmgrimpl.java
字号:
HttpSession session = (HttpSession) userInfo.get(o);
logger.debug("session: " + session);
User u = (User) session
.getAttribute(Constants.SESSION_USER);
logger.debug("user: " + u);
logger.debug("u.getTreeview().getId(): "
+ u.getTreeview().getId());
logger.debug("treeViews.get(i).getId(): "
+ treeViews.get(i).getId());
// 如果当前获取的用户是属于该岗位,就修改此用户Session
if (u.getTreeview().getId().equals(
treeViews.get(i).getId())) {
// 设入用户权限是否被修改的值
session.setAttribute(
SystemConstant.SESSION_RIGHTS_IS_UPDATED,
true);
// 设入岗位所拥有的权限集合
// session.setAttribute(
// SystemConstant.SESSION_RIGHTS, rights);
}
// }
// 2009-01-22 有改动重新装载权限。
if ((Boolean) session
.getAttribute(SystemConstant.SESSION_RIGHTS_IS_UPDATED)) {
// List<Rights> urRights = new ArrayList<Rights>();
// List<UserRole> ur1 =
// roleMgr.findByUserId(user.getId());
// for (int j = 0; j < ur1.size(); j++) {
List<Rights> rights = positionMgr
.getAllRightsByPositionId(treeViews.get(i)
.getId());
// logger.debug("r : " + r.get(i).getRightsName());
// }
Map<String, WebRightsView> jspRightsControl = rightsMgr
.getWebRightsView(rights,
Constants.RIGHTS_FALG,
Constants.JSPRIGHTSCONTROL_YES);
session.setAttribute(
SystemConstant.JSP_RIGHTS_CONTROL,
jspRightsControl);
}
}
}
}
}
}
@SuppressWarnings("unchecked")
public void authorizationRole(String objId, String useScheme,
String[] rightIds, HttpServletRequest request) {
boolean isSuccessfull = true;
int roleId = 0;
if (objId != null && !objId.equals("")) {
roleId = Integer.parseInt(objId);
}
List<RoleRights> prs = new ArrayList<RoleRights>();
try {
// 取角色权限对象集合
prs = roleMgr.findByRole(roleId);
logger.debug("岗位权限对象集合的大小是: " + prs.size());
// 不预先删除功能权限和数据权限,只有功能权限和数据权限有改动才修改数据库。
} catch (NumberFormatException e) {
logger.error(e.getMessage());
isSuccessfull = false;
throw new ApplicationException(Constants.APPLICATIONEXCEPTION);
} catch (SystemException e1) {
logger.error(e1.getMessage());
isSuccessfull = false;
throw e1;
}
if (rightIds != null) {// 从页面取到的rightIds有可能为空
List<RoleRights> prNewList = new ArrayList<RoleRights>();
for (int i = 0; i < rightIds.length; i++) {
String rid = rightIds[i];
RoleRights prights = new RoleRights();
prights.setRightsId(Integer.parseInt(rid));
prNewList.add(prights);
}
logger.debug("prNewList 1 : " + prNewList.size());
// 对功能
List<RoleRights> oldPra = recombinationPr(prNewList, prs,
Constants.ROLE_FALG);// 把页面取过来的功能权限id分成新的和要撤消的,原有的不变。未处理
logger.debug("prNewList 2 : " + prNewList.size());
for (int n = 0; n < 2; n++) {
List<RoleRights> commonPra = new ArrayList<RoleRights>();
if (n == 0) {
commonPra = prNewList;
}
if (n == 1) {
commonPra = oldPra;
}
// end
// 对以下逻辑改为:先新增新的功能权限,再删除撤消的功能权限,对不变的功能权限不做任何操作。
// for (int i = 0; i < rightIds.length; i++) {//改掉
for (int i = 0; i < commonPra.size(); i++) {// 新增新的功能权限
// hrw 2008-12-19 modify
// String rid = rightIds[i];
// int rightId = Integer.parseInt(rid);
int rightId = commonPra.get(i).getRightsId();
logger.debug("权限ID: " + rightId);
// end
String dataAreaIds = "";// 数据范围对象
String reelection = "n";
String dataAreaId_pid = "";// 子模块全局数据范围对象ID hrw 2008-12-19
String dataAreaId_pidValue = "";
// add.
if (useScheme != null && useScheme.equals("1")) {
logger.debug("使用方案授权 ");
String scheme = request.getParameter("scheme");
int id = 0;
if (scheme != null && !scheme.equals("")) {
id = Integer.parseInt(scheme);
dataAreaIds = dataAreaSchemeMgr
.findTreeviewIdsById(id);
}
} else {
logger.debug("逐步授权 ");
/*
* 在rightTree.js里,每个树节点都挂一下隐藏域,隐藏域属性ID,name均为 节点ID +
* "_area" 字符串, 隐藏域存储数据范围页面返回的部门节点ID集合组成的字符串
*/
// hrw 2008-12-19 modify
// dataAreaIds = request.getParameter(rid + "_area");//
// 数据范围对象
dataAreaIds = request.getParameter(rightId + "_area");// 数据范围对象
logger.debug("dataAreaIds : " + dataAreaIds);
dataAreaId_pid = request.getParameter(rightId + "_pid");// 取页面子模块数据全局范围Id。
logger.debug("dataAreaId_pid : " + dataAreaId_pid);
dataAreaId_pidValue = request
.getParameter(dataAreaId_pid + "_area");// 取页面子模块数据全局范围
logger.debug("dataAreaId_pidValue : "
+ dataAreaId_pidValue);
String dataAreaSelectedFlag = request
.getParameter(rightId + "_selected");// 功能权限的数据范围是否有被重新设置过。
// end
// 先确定是否有先设整体模块的全局数据范围,再处理子模块的全局数据范围。
String allAreas = request.getParameter("_area");
logger.debug("allAreas : " + allAreas);
String allSelected = request.getParameter("_selected");
logger.debug("allSelected : " + allSelected);
String pDataAreaSelectedFlag = request
.getParameter(dataAreaId_pid + "_selected");
logger.debug("pDataAreaSelectedFlag : "
+ pDataAreaSelectedFlag);
if (allAreas != null && !"".equals(allAreas)) {
if (!"y".equals(pDataAreaSelectedFlag)) {
dataAreaId_pidValue = allAreas;
}
}
// dataAreaIds 不能为null
if (dataAreaIds == null || "".equals(dataAreaIds)) {
dataAreaIds = "";
if (dataAreaId_pidValue != null
&& !"".equals(dataAreaId_pidValue)) {// 功能权限没有选数据范围且子模块有设全局数据权限
// 若有设子模志全局的数据范围且该功能权限的数据范围没被重新设置过,默认为被全局设置过,数据范围为全局的和原有的数据范围。
// 若功能权限被重新设置过,以重新设置过为主。
if (!"y".equals(dataAreaSelectedFlag)) {
dataAreaIds = dataAreaId_pidValue;
}
}
}
logger.debug("dataAreaIds : " + dataAreaIds);
if("y".equals(dataAreaSelectedFlag) || "y".equals(pDataAreaSelectedFlag) || "y".equals(allSelected)){
reelection = "y";
}
}
logger.debug("数据范围ID: " + dataAreaIds);
try {
/*
* 保存授权对象, 权限对象以及数据范围对象三者的关系
* 因为对不同授权对象授予的权限对象是一样的,所以先循环权限表,再为每一个授权对象授予同一权限
* 每一个隐藏域里存放的数据范围对象ID集合也都是对应一个权限
*/
// 保存授权对象, 权限对象以及数据范围对象三者的关系
// hrw 2008-12-19 modify
if (n == 0) {
// 数据库里没有的传岗位id。
roleMgr.saveThreeObjRelation(roleId, rightId,
dataAreaIds, true,reelection);
}
if (n == 1) {
// 数据库里已存在的传功能权限主键。
roleMgr.saveThreeObjRelation(commonPra.get(i)
.getId(), rightId, dataAreaIds, false,reelection);
}
// end
} catch (SystemException e) {
logger.error(e.getMessage());
isSuccessfull = false;
throw e;
}
}
}
List roleRights = new ArrayList();
for (int i = 0; i < prs.size(); i++) {// 删除撤消的功能权限和相关的数据权限
roleRights.add(prs.get(i).getId());
}
// 取角色权限数据范围
List<RoleRightArea> rra = utilDao
.findByIds(DataBaseTableName.RoleRightArea, "roleRightsId",
roleRights);
// 删除角色权限数据范围表信息
if (rra != null) {
utilDao.deleteAll(rra);
}
// 删除角色权限表信息
utilDao.deleteAll(prs);
} else {// 如果从页面取到的right为空,说明该岗位没有任何权限,些时删除所有权限
List roleRights = new ArrayList();
for (int i = 0; i < prs.size(); i++) {// 删除撤消的功能权限和相关的数据权限
roleRights.add(prs.get(i).getId());
}
// 取角色权限数据范围
List<RoleRightArea> rra = utilDao
.findByIds(DataBaseTableName.RoleRightArea, "roleRightsId",
roleRights);
// 删除角色权限数据范围表信息
if (rra != null) {
utilDao.deleteAll(rra);
}
// 删除角色权限表信息
utilDao.deleteAll(prs);
}
if (isSuccessfull) {// 授权成功
// 获取当前用户信息
User user = (User) request.getSession().getAttribute(
Constants.SESSION_USER);
// 获取全局会话
ServletContext application = request.getSession()
.getServletContext();
// 获取用户信息
Map userInfo = (Map) application
.getAttribute(SystemConstant.APPLICATION_USER_INFO);
if (userInfo != null) {
logger.debug("userInfo: " + userInfo + " userInfo.size: "
+ userInfo.size());
// 获取该角色所有权限 2009-01-21 改暂不取。
// List<Rights> rights = roleMgr.getAllRightsByRoleId(roleId);
// 遍历存放用户session的Map对象
for (Object o : userInfo.keySet()) {
Integer userId = (Integer) o;
logger.debug("key: " + userId);
// 不是本人的ID(管理员)
// if (!userId.equals(user.getId())) {
// 获取Session
HttpSession session = (HttpSession) userInfo.get(o);
logger.debug("session: " + session);
User u = (User) session
.getAttribute(Constants.SESSION_USER);
// 如果当前获取的用户是属于该角色,就修改此用户Session
List<UserRole> ur = roleMgr.findByUserId(u.getId());
// 遍历存放用户角色对象
for (int j = 0; j < ur.size(); j++) {
if (ur.get(j).getRoleId().equals(roleId)) {
// 设入用户权限是否被修改的值
session.setAttribute(
SystemConstant.SESSION_RIGHTS_IS_UPDATED,
true);
// 设入角色所拥有的权限集合 2009-01-21 改
// session.setAttribute(
// SystemConstant.SESSION_RIGHTS, rights);
break;
// end modify
}
}
// 2009-01-21 有改动重新装载权限。
if ((Boolean) session
.getAttribute(SystemConstant.SESSION_RIGHTS_IS_UPDATED)) {
List<Rights> urRights = new ArrayList<Rights>();
List<UserRole> ur1 = roleMgr.findByUserId(user.getId());
for (int i = 0; i < ur1.size(); i++) {
List<Rights> r = roleMgr.getAllRightsByRoleId(ur
.get(i).getRoleId());
urRights.addAll(r);
// logger.debug("r : " + r.get(i).getRightsName());
}
Map<String, WebRightsView> jspRightsControl = rightsMgr
.getWebRightsView(urRights,
Constants.RIGHTS_FALG,
Constants.JSPRIGHTSCONTROL_YES);
session.setAttribute(SystemConstant.JSP_RIGHTS_CONTROL,
jspRightsControl);
}
// end
// }
}
}
}
}
/**
* 根据dataRreaId生成PositionRightsArea。
*/
public List<PositionRightsArea> conversionPositionRightsArea(
String[] dataArea) {
List<PositionRightsArea> praList = new ArrayList<PositionRightsArea>();
for (int i = 0; i < dataArea.length; i++) {
if (dataArea[i] != null && !"".equals(dataArea[i])) {
PositionRightsArea pra = new PositionRightsArea();
pra.setTreeviewId(Integer.parseInt(dataArea[i]));
praList.add(pra);
}
}
return praList;
}
public List<RoleRightArea> conversionRoleRightsArea(String[] dataArea) {
List<RoleRightArea> praList = new ArrayList<RoleRightArea>();
for (int i = 0; i < dataArea.length; i++) {
if (dataArea[i] != null && !"".equals(dataArea[i])) {
RoleRightArea pra = new RoleRightArea();
pra.setTreeviewId(Integer.parseInt(dataArea[i]));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -