/// <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); }
/// <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); }