/// <summary>
        /// 获取数据权限Sql
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <string> GetDataPermissionSql(SystemPermissionSqlInput input)
        {
            StringBuilder stringBuilder = new StringBuilder();
            //获取当前用户是否为超级管理员
            var userInfo = await _userInfoRepository.FindByIdAsync(input.PrincipalUser.UserId);

            if (userInfo.IsAdmin)
            {
                return("  1=1");
            }
            IList <SystemData> datas = (await _permissionRepository.GetDataPermission(input)).ToList();

            if (datas.Any())
            {
                foreach (var data in datas)
                {
                    if (!data.RuleSql.IsNullOrEmpty())
                    {
                        //替换Html标签
                        data.RuleSql = data.RuleSql.ReplaceHtmlTag();
                        //是否具有规则数据
                        if (!data.RuleJson.IsNullOrEmpty())
                        {
                            IList <SystemDataRuleJsonDoubleWay> ruleJsons = JsonConvert.DeserializeObject <IList <SystemDataRuleJsonDoubleWay> >(data.RuleJson).ToList();
                            foreach (var ruleJson in ruleJsons)
                            {
                                //替换Sql
                                data.RuleSql = data.RuleSql.Replace(ruleJson.Field, ruleJson.Value.InSql());
                            }
                        }
                        //替换固定信息
                        data.RuleSql = await GetRuleSql(data.RuleSql, input.PrincipalUser.UserId);

                        //追加替换后的Sql
                        stringBuilder.Append(data.RuleSql + " OR ");
                    }
                }
            }
            //去除最后一个OR
            string sql = stringBuilder.ToString();

            return(sql.Contains("OR") ? sql.Substring(0, sql.Length - 3) : sql);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 获取数据权限Sql
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <string> GetDataPermissionSql(SystemPermissionSqlInput input)
        {
            StringBuilder      stringBuilder = new StringBuilder();
            IList <SystemData> datas         = (await _permissionRepository.GetDataPermission(input)).ToList();

            if (datas.Any())
            {
                foreach (var data in datas)
                {
                    if (!data.RuleSql.IsNullOrEmpty())
                    {
                        //替换Html标签
                        data.RuleSql = data.RuleSql.ReplaceHtmlTag();
                        //是否具有规则数据
                        if (!data.RuleJson.IsNullOrEmpty())
                        {
                            IList <SystemDataRuleJsonDoubleWay> ruleJsons = data.RuleJson.JsonStringToList <SystemDataRuleJsonDoubleWay>();
                            foreach (var ruleJson in ruleJsons)
                            {
                                //替换Sql
                                data.RuleSql = data.RuleSql.Replace(ruleJson.Field, ruleJson.Value.SqlRemoveStr());
                            }
                        }

                        //替换固定信息
                        data.RuleSql = await GetRuleSql(data.RuleSql, input.PrincipalUser.UserId);

                        //追加替换后的Sql
                        stringBuilder.Append(data.RuleSql + " OR ");
                    }
                }
            }
            //去除最后一个OR
            string sql = "(" + stringBuilder.ToString();

            sql = sql.Contains("OR") ? sql.Substring(0, sql.Length - 3) + ")" : sql + ")";



            return(sql == "()" ? string.Empty: sql);
        }