Пример #1
0
 private static void AddUserSearch(ref SearchCondition condition, string queryField, string[] users, string userId)
 {
     if (users.Contains(SystemEnumUser.OwnDept.ToString()))
     {
         string userOrgId = Formula.FormulaHelper.GetService <Formula.IUserService>().GetUserInfoByID(userId).UserOrgID;
         string userIds   = Formula.FormulaHelper.GetService <Formula.IOrgService>().GetUserIDsInOrgs(userOrgId);
         condition.Add(queryField, Formula.QueryMethod.In, userIds);
     }
     else if (users.Contains(SystemEnumUser.Owner.ToString()))
     {
         condition.Add(queryField, Formula.QueryMethod.Equal, userId);
     }
 }
Пример #2
0
 private static void AddIntervalSearch(ref SearchCondition condition, string queryField, string[] intervals)
 {
     foreach (string interval in intervals)
     {
         DateTime?t0 = null;
         DateTime?t1 = null;
         if (SystemEnumInterval.YearBefore.ToString() == interval)
         {
             t1 = DateTime.Now.Date.AddDays(1).AddYears(-1);
             condition.Add(queryField, Formula.QueryMethod.LessThan, (DateTime)t1);
         }
         else if (SystemEnumInterval.Year.ToString() == interval)
         {
             t1 = DateTime.Now.Date.AddDays(1);
             t0 = ((DateTime)t1).AddYears(-1);
         }
         else if (SystemEnumInterval.HalfYear.ToString() == interval)
         {
             t1 = DateTime.Now.Date.AddDays(1);
             t0 = ((DateTime)t1).AddMonths(-6);
         }
         else if (SystemEnumInterval.Month.ToString() == interval)
         {
             t1 = DateTime.Now.Date.AddDays(1);
             t0 = ((DateTime)t1).AddMonths(-1);
         }
         else if (SystemEnumInterval.Week.ToString() == interval)
         {
             t1 = DateTime.Now.Date.AddDays(1);
             t0 = ((DateTime)t1).AddDays(-7);
         }
         if (t0 != null && t1 != null)
         {
             condition.AddBetweenCondition(queryField, (DateTime)t0, (DateTime)t1);
         }
         else
         {
             if (t0 != null)
             {
                 condition.Add(queryField, Formula.QueryMethod.GreaterThanOrEqual, (DateTime)t0);
             }
             else if (t1 != null)
             {
                 condition.Add(queryField, Formula.QueryMethod.LessThan, (DateTime)t1);
             }
         }
     }
 }
Пример #3
0
        public override JsonResult GetRelationList(QueryBuilder qb)
        {
            if (string.IsNullOrEmpty(Request["NodeFullID"]))
            {
                return(Json(""));
            }
            string resID = Request["NodeFullID"].Split('.').Last();

            string sql = "";

            if (Config.Constant.IsOracleDb)
            {
                sql = @"
select * from (
select ID, Name, to_char(FullID) as FullID,Description,'组织' as Type,'Org' as TypeCode from S_A__OrgRes join S_A_Org on OrgID=ID where ResID='{0}'
union
select ID, Name,'' as FullID,Description,'角色' as Type,'Role' as TypeCode from S_A__RoleRes join S_A_Role on RoleID=ID where ResID='{0}' 
union
select ID, Name,'' as FullID,Description,'用户' as Type,'User' as TypeCode from S_A__UserRes join S_A_User on UserID=ID where ResID='{0}'
) table1 order by Type,FullID asc";
            }
            else
            {
                //                sql = @"
                //select * from (
                //select ID, Name, FullID,Description,'组织' as Type,'Org' as TypeCode from S_A__OrgRes join S_A_Org on OrgID=ID where ResID='{0}'
                //union
                //select ID, Name,'' as FullID,Description,'角色' as Type,'Role' as TypeCode from S_A__RoleRes join S_A_Role on RoleID=ID where ResID='{0}'
                //union
                //select ID, Name,'' as FullID,Description,'用户' as Type,'User' as TypeCode from S_A__UserRes join S_A_User on UserID=ID where ResID='{0}'
                //) table1 order by Type,FullID asc";

                sql = @"
select * from (
select ID, Name, FullID,Description,'组织' as Type,'Org' as TypeCode from S_A__OrgRes join S_A_Org on OrgID=ID where ResID='{0}'
union
select ID, Name,CorpID as FullID,Description,'角色' as Type,'Role' as TypeCode from S_A__RoleRes join S_A_Role on RoleID=ID where ResID='{0}' 
union
select S_A_User.ID, S_A_User.Name,max(S_A_Org.FullID) as FullID,S_A_User.Description,'用户' as Type,'User' as TypeCode from S_A__UserRes join S_A_User on UserID=ID 
join S_A__OrgUser on S_A__OrgUser.UserID=S_A_User.ID
join S_A_Org on S_A_Org.ID=S_A__OrgUser.OrgID
where ResID='{0}' 
group by S_A_User.ID, S_A_User.Name,S_A_User.Description
) table1 order by Type,FullID asc";
            }

            SQLHelper sqlHelper = SQLHelper.CreateSqlHelper("Base");

            SearchCondition cnd = new SearchCondition();

            if (!string.IsNullOrEmpty(Request["CorpID"]))
            {
                cnd.Add("FullID", Formula.QueryMethod.InLike, Request["CorpID"]);
            }

            return(Json(sqlHelper.ExecuteDataTable(string.Format(sql, resID), cnd)));
        }
Пример #4
0
        public override JsonResult GetTree()
        {
            string sql = "select * from S_A_Org where IsDeleted<>'1' order by SortIndex";

            SearchCondition cnd = new SearchCondition();

            if (!string.IsNullOrEmpty(Request["CorpID"]))
            {
                cnd.Add("FullID", QueryMethod.InLike, Request["CorpID"]);
            }
            SQLHelper sqlHelper = SQLHelper.CreateSqlHelper(ConnEnum.Base);
            var       dt        = sqlHelper.ExecuteDataTable(sql, cnd);

            return(Json(dt));
        }
Пример #5
0
        public JsonResult GetTree()
        {
            string fullID = Request["RootFullID"];

            if (fullID == null)
            {
                fullID = "";
            }
            fullID = fullID.Trim(',', ' ');
            SQLHelper sqlHelper = SQLHelper.CreateSqlHelper("Base");

            string sql = string.Format(@"select ID,'' as FullName,Code,case when '{1}'='EN' then isnull(NameEN,Name) else Name end as Name,
            ParentID,FullID,Type,SortIndex,Description from S_A_Org where  FullID like '{0}%' and IsDeleted='0'", fullID, FormulaHelper.GetCurrentLGID());

            if (!string.IsNullOrEmpty(Request["OrgType"]))
            {
                sql += string.Format(" and Type in ('{0}')", Request["OrgType"].Replace(",", "','"));
            }

            SearchCondition cnd = new SearchCondition();

            if (!string.IsNullOrEmpty(Request["CorpID"]))
            {
                cnd.Add("FullID", Formula.QueryMethod.InLike, Request["CorpID"]);
            }

            sql += " order by ParentID,SortIndex";
            var dt = sqlHelper.ExecuteDataTable(sql, cnd);

            //数据量大后加载非常缓慢,故注释此处 by PengPai
            //foreach (DataRow item in dt.Rows)
            //{
            //    var itemFullID = item["FullID"].ToString();
            //    var itemFullIDList = itemFullID.Split('.');
            //    if (itemFullIDList.Length > 1)
            //    {
            //        var ancestorIDs = String.Join(",", itemFullIDList);
            //        var ancestorOrg = dt.Select("ID in ('" + ancestorIDs.Replace(",", "','") + "')", " FullID asc");
            //        var fullName = "";
            //        foreach (DataRow ancestor in ancestorOrg)
            //        {
            //            fullName += ancestor["Name"].ToString() + ".";
            //        }
            //        item["FullName"] = fullName.Trim().TrimEnd('.');
            //    }
            //}
            return(Json(dt, JsonRequestBehavior.AllowGet));
        }
Пример #6
0
        private static SearchCondition GetKeySearch(Dictionary <string, List <Dictionary <string, string> > > queryData)
        {
            SearchCondition condition = new SearchCondition();

            condition.IsOrRelateion = true;
            if (queryData != null)
            {
                List <Dictionary <string, string> > alKeyData = queryData["keydata"];
                foreach (Dictionary <string, string> ht in alKeyData)
                {
                    string queryField = ht["queryfield"];
                    string value      = ht["value"];
                    condition.Add(queryField, Formula.QueryMethod.Like, value);
                }
            }
            return(condition);
        }
Пример #7
0
        private static SearchCondition GetTabSearch(Dictionary <string, List <Dictionary <string, string> > > queryData, string userId)
        {
            SearchCondition condition = new SearchCondition();

            condition.IsOrRelateion = false;
            if (queryData != null)
            {
                List <Dictionary <string, string> > tabDatas = queryData["tabdata"];
                foreach (Dictionary <string, string> tab in tabDatas)
                {
                    string   queryField = tab["queryfield"];
                    string   enumKey    = tab["enumkey"];
                    string[] values     = tab["value"].Split(',');

                    if (values != null)
                    {
                        if (enumKey.ToLower() == "system.interval")
                        {
                            AddIntervalSearch(ref condition, queryField, values);
                        }
                        else if (enumKey.ToLower() == "system.ownerowndept")
                        {
                            AddUserSearch(ref condition, queryField, values, userId);
                        }
                        else
                        {
                            string strValue = string.Empty;
                            foreach (object obj in values)
                            {
                                strValue += Convert.ToString(obj) + ",";
                            }
                            condition.Add(queryField, Formula.QueryMethod.In, strValue.TrimEnd(','));
                        }
                    }
                }
            }
            return(condition);
        }
Пример #8
0
        private static void dealOtherDataAuth(SearchCondition cnd, Res res, UserInfo user)
        {
            string dataFilter = res.DataFilter;


            var arr = JsonHelper.ToObject <List <Dictionary <string, string> > >(dataFilter);

            foreach (var a in arr)
            {
                string fieldName = a["FieldName"];
                string queryMode = a["QueryMode"];
                string value     = a["Value"];
                string orGroup   = "";
                if (a.ContainsKey("OrGroup") && !string.IsNullOrEmpty(a["OrGroup"]))
                {
                    orGroup = a["OrGroup"];
                }


                #region 替换value中的变量
                Regex reg = new Regex("\\{[0-9a-zA-Z_]*\\}");
                value = reg.Replace(value, (Match m) =>
                {
                    string v = m.Value.Trim('{', '}');

                    if (!string.IsNullOrEmpty(HttpContext.Current.Request[v]))
                    {
                        return(HttpContext.Current.Request[v]);
                    }
                    switch (v)
                    {
                    case Formula.Constant.CurrentUserID:
                        return(user.UserID);

                    case Formula.Constant.CurrentUserName:
                        return(user.UserName);

                    case Formula.Constant.CurrentUserOrgID:
                        return(user.UserOrgID);

                    case Formula.Constant.CurrentUserOrgIDs:
                        return(user.UserOrgIDs);

                    case Formula.Constant.CurrentUserOrgName:
                        return(user.UserOrgName);

                    case Formula.Constant.CurrentUserPrjID:
                        return(user.UserPrjID);

                    case Formula.Constant.CurrentUserPrjName:
                        return(user.UserPrjName);

                    case "CurrentTime":
                        return(DateTime.Now.ToString());

                    default:
                        return(m.Value);
                    }
                });
                #endregion

                QueryMethod q = (QueryMethod)Enum.Parse(typeof(QueryMethod), queryMode);
                cnd.Add(fieldName, q, value, orGroup, res.ID);
            }
        }
Пример #9
0
        public static SearchCondition CreateAuthDataFilter()
        {
            UserInfo user = FormulaHelper.GetUserInfo();

            SearchCondition cnd = new SearchCondition();

            cnd.IsOrRelateion = true;

            if (HttpContext.Current.Request.UrlReferrer == null)
            {
                return(cnd);
            }

            string url = HttpContext.Current.Request.UrlReferrer.PathAndQuery;

            if (url.StartsWith("/portal", StringComparison.CurrentCultureIgnoreCase)) //在ActionResult中进行权限过滤
            {
                url = HttpContext.Current.Request.Url.PathAndQuery;
            }


            //没有定义数据权限,则不过滤数据
            if (GetService <IResService>().GetRes(url, "Data").Count() == 0)
            {
                return(cnd);
            }

            //当前用户的数据级权限
            var resList = GetService <IResService>().GetRes(url, "Data", user.UserID);

            resList = resList.Where(c => c.Type == "Data").ToList();//三权分离的管理员会无条件拥有"系统管理菜单权限",因此需要重新过滤Data

            if (resList.Where(c => c.DataFilter == "All").Count() > 0)
            {
                return(cnd);
            }
            else
            {
                if (Config.Constant.IsOracleDb)
                {
                    foreach (var item in resList)
                    {
                        switch (item.DataFilter)
                        {
                        case "OrgID":
                            cnd.Add("ORGID", QueryMethod.Equal, user.UserOrgID);
                            break;

                        case "PrjID":
                            cnd.Add("PRJID", QueryMethod.Equal, user.UserPrjID);
                            break;

                        case "CreateUserID":
                            cnd.Add("CREATEUSERID", QueryMethod.Equal, user.UserID);
                            break;

                        default:
                            dealOtherDataAuth(cnd, item, user);
                            break;
                        }
                    }
                }
                else
                {
                    foreach (var item in resList)
                    {
                        switch (item.DataFilter)
                        {
                        case "OrgID":
                            cnd.Add("OrgID", QueryMethod.Equal, user.UserOrgID);
                            break;

                        case "PrjID":
                            cnd.Add("PrjID", QueryMethod.Equal, user.UserPrjID);
                            break;

                        case "CreateUserID":
                            cnd.Add("CreateUserID", QueryMethod.Equal, user.UserID);
                            break;

                        default:
                            dealOtherDataAuth(cnd, item, user);
                            break;
                        }
                    }
                }
            }

            if (cnd.Items.Count == 0)
            {
                cnd.Add("ID", QueryMethod.Equal, "");
            }

            return(cnd);
        }