//查询当前用户有权限的应用 private void DoQueryApplication() { using (DbContext context = DbContext.GetContext(AppResource.ConnAlias)) { ExceptionHelper.TrueThrow(this.LogOnUserInfo == null, "没有登录者信息"); //******************** //查询权限确定应用范围 //******************** XmlElement root = _XmlRequest.DocumentElement; string strParentID = root.GetAttribute("parent_id"); string strSQL = string.Empty; bool bAdminUser = SecurityCheck.IsAdminUser(LogOnUserInfo.UserLogOnName); string strAppLevels = string.Empty; if (false == bAdminUser) { #region 得到父应用的resource_level strSQL = string.Format("SELECT RESOURCE_LEVEL FROM APPLICATIONS WHERE ID = {0}", TSqlBuilder.Instance.CheckQuotationMark(strParentID, true)); string strParentLevel = string.Empty; object obj = InnerCommon.ExecuteScalar(strSQL); if (obj != null) { strParentLevel = obj.ToString(); } string strTemp = string.Empty; DataTable userApps = SecurityCheck.GetUserApplications(LogOnUserInfo.UserLogOnName, UserValueType.LogonName, RightMaskType.Self).Tables[0]; for (int i = 0; i < userApps.Rows.Count; i++) { strTemp = userApps.Rows[i]["RESOURCE_LEVEL"].ToString(); if (strTemp.Length >= strParentLevel.Length + 3 && strTemp.Substring(0, strParentLevel.Length) == strParentLevel) { if (strAppLevels == string.Empty) { strAppLevels += strTemp.Substring(0, strParentLevel.Length + 3); } else { strAppLevels += "," + strTemp.Substring(0, strParentLevel.Length + 3); } } } #endregion } #region Prepare SQL strSQL = "SELECT ID,NAME, CODE_NAME, DESCRIPTION, SORT_ID, RESOURCE_LEVEL, CHILDREN_COUNT, ADD_SUBAPP, USE_SCOPE, INHERITED_STATE " + "FROM APPLICATIONS "; if (strParentID != "") { strSQL += "WHERE LEFT(RESOURCE_LEVEL, LEN(RESOURCE_LEVEL)-3) = (SELECT RESOURCE_LEVEL FROM APPLICATIONS WHERE ID = " + TSqlBuilder.Instance.CheckQuotationMark(strParentID, true) + ") "; } else { strSQL += "WHERE LEN(RESOURCE_LEVEL) = 3 "; } if (strAppLevels != string.Empty) { strSQL += string.Format("\n AND RESOURCE_LEVEL IN ({0})", InnerCommon.AddMulitStrWithQuotationMark(strAppLevels)); } else if (false == bAdminUser) { strSQL += "\n AND (1=0)"; } strSQL += " ORDER BY SORT_ID"; #endregion DataSet ds = InnerCommon.ExecuteDataset(strSQL); _XmlResult = InnerCommon.GetXmlDoc(ds); DataTable userRoleDT = null; DataTable appFuncDT = null; foreach (XmlNode xNode in _XmlResult.FirstChild.ChildNodes) { string appCodeName = xNode.SelectSingleNode(".//CODE_NAME").InnerText; if (false == bAdminUser) { if (userRoleDT == null) { userRoleDT = SecurityCheck.GetUserApplicationsRoles(LogOnUserInfo.UserLogOnName, UserValueType.LogonName, RightMaskType.Self, DelegationMaskType.Original).Tables[0]; } if (appFuncDT == null) { string roleIDs = "''"; foreach (DataRow row in userRoleDT.Rows) { roleIDs += string.Format(",'{0}'", row["ID"]); } strSQL = string.Format(@"SELECT A.CODE_NAME APP_CODE_NAME, F.CODE_NAME FUN_CODE_NAME FROM ROLES R INNER JOIN APPLICATIONS A ON R.APP_ID = A.ID INNER JOIN ROLE_TO_FUNCTIONS RF ON R.ID = RF.ROLE_ID INNER JOIN FUNCTIONS F ON RF.FUNC_ID = F.ID WHERE R.ID IN ({0})" , roleIDs); appFuncDT = InnerCommon.ExecuteDataset(strSQL).Tables[0]; } //显示服务范围结点 if (appFuncDT.Select(string.Format("[APP_CODE_NAME]= '{0}' AND [FUN_CODE_NAME] IN ( 'ADD_SCOPE_FUNC','DELETE_SCOPE_FUNC' )", appCodeName)).Length > 0) { XmlHelper.AppendNode(xNode, "APP_SCOPES", "True"); } else { XmlHelper.AppendNode(xNode, "APP_SCOPES", "False"); } //显示自授权结点 if (appFuncDT.Select(string.Format("[APP_CODE_NAME]= '{0}' AND [FUN_CODE_NAME] IN ( 'SELF_MAINTAIN_FUNC' )", appCodeName)).Length > 0) { XmlHelper.AppendNode(xNode, "SELF_MAINTAIN_FUNC", "True"); } else { XmlHelper.AppendNode(xNode, "SELF_MAINTAIN_FUNC", "False"); } //显示应用角色结点 if (appFuncDT.Select(string.Format("[APP_CODE_NAME]= '{0}' AND [FUN_CODE_NAME] IN ( 'MODIFY_SCOPE_FUNC','ADD_ROLE_FUNC','DELETE_ROLE_FUNC','MODIFY_ROLE_FUNC','ADD_OBJECT_FUNC','DELETE_OBJECT_FUNC','MODIFY_OBJECT_FUNC' )", appCodeName)).Length > 0) { XmlHelper.AppendNode(xNode, "APP_ROLES", "True"); } else { XmlHelper.AppendNode(xNode, "APP_ROLES", "False"); } //显示应用功能结点 if (appFuncDT.Select(string.Format("[APP_CODE_NAME]= '{0}' AND [FUN_CODE_NAME] IN ( 'ADD_FUNCTION_FUNC','DELETE_FUNCTION_FUNC','MODIFY_FUNCTION_FUNC','RTF_MAINTAIN_FUNC' )", appCodeName)).Length > 0) { XmlHelper.AppendNode(xNode, "APP_FUNCTIONS", "True"); } else { XmlHelper.AppendNode(xNode, "APP_FUNCTIONS", "False"); } } else { XmlHelper.AppendNode(xNode, "APP_SCOPES", "True"); XmlHelper.AppendNode(xNode, "SELF_MAINTAIN_FUNC", "True"); XmlHelper.AppendNode(xNode, "APP_ROLES", "True"); XmlHelper.AppendNode(xNode, "APP_FUNCTIONS", "True"); } } } }