private bool ApplyParameters() { if ((Context.User == null) || (Context.User.Parameters == null)) { return(true); } var regex = new Regex("{.*?}"); var parameters = regex.Matches(ParsedQuery); ParamErrors = new List <string>(); foreach (var parameter in parameters) { string key = parameter.ToString().Replace(" ", ""); if (Context.User.Parameters.ContainsKey(key)) { ParsedQuery = ParsedQuery.Replace(parameter.ToString(), Context.User.Parameters[key]); } else { ParamErrors.Add(string.Format("User '{0}' does not have parameter '{1}'", Context.User.UserName, key)); } } return(ParamErrors.Count == 0 ? true : false); }
private void IfSameColumnConditionExistsRemoveCondition(string tableOrAliasName, RbacCondition condition) { bool somethingReplaced = false; foreach (string column in condition.Columns) { RbacWhereClause aWhereClause = WhereClauses.Find(tableOrAliasName, column); if (aWhereClause != null) { //this column is referred as condition in original query ParsedQuery = ParsedQuery.Replace(aWhereClause.WhereClauseString, string.Empty); somethingReplaced = true; } } if (somethingReplaced) { ParsedQuery = ParsedQuery.TrimEnd(); string[] words = new string[] { "and", "where" }; foreach (string word in words) { if ((ParsedQuery.Length > word.Length) && (ParsedQuery.Substring(ParsedQuery.Length - word.Length, word.Length).Equals(word, StringComparison.OrdinalIgnoreCase))) { ParsedQuery = ParsedQuery.Remove(ParsedQuery.Length - word.Length, word.Length); } } } }
public bool ParseUsingSqlCommand() { if (TablesReferred == null) { TablesReferred = new List <RbacTable>(); } else { TablesReferred.Clear(); } try { using (SqlConnection connection = new SqlConnection(Context.ConnectionString)) { connection.Open(); SqlCommand command = new SqlCommand(OriginalQuery, connection); SqlDataReader reader = command.ExecuteReader(CommandBehavior.KeyInfo); DataTable schemaTable = reader.GetSchemaTable(); foreach (DataRow row in schemaTable.Rows) { //if (row["BaseTableName"].ToString() == "City") // Debugger.Break(); RbacSelectColumn column = new RbacSelectColumn(); column.Alias = row["ColumnName"].ToString(); column.Name = row["BaseColumnName"].ToString(); column.Table.Name = row["BaseTableName"].ToString(); Columns.Add(column); RbacTable table = Context.User.Role.CrudPermissions.Find(column.Table.Name); if (table != null) { TablesReferred.Add(table); } else { throw new Exception(string.Format("The referred table {0} was not found in meta data!", row["BaseTableName"].ToString())); } } TablesReferred = new List <RbacTable>(TablesReferred.DistinctBy(t => t.Name)); connection.Close(); } ParsedMethod = RbacSelectQueryParsedMethods.CommandBehavior; ParsedQuery = ParsedQuery.Replace("*", Columns.ToCommaSeparatedString()); IsParsed = true; return(true); } catch (Exception ex) { Errors.Add(ex.Message); } return(false); }