public void ShouldReturnTrueWhenHaveAccessToForeignTableField() { const string expression = "Projects.Name.ToString()"; const string currentDataSource = "datasource"; const int userId = 234; _dataSourceAccessValidator.Setup(_ => _.CanReadSource(currentDataSource, userId)).Returns(true); _dataSourceAccessValidator.Setup(_ => _.CanReadSource("Projects", userId)).Returns(true); _queryEntityNamePropertyTypeNameResolver .Setup(_ => _.ResolvePropertyTypeName(currentDataSource, "Projects")) .Returns("Projects"); _queryVariableNameBuilder.Setup(_ => _.IsSimpleValue("Projects")).Returns(true); _queryVariableNameBuilder.Setup(_ => _.IsSimpleValue("Name")).Returns(true); _queryVariableNameBuilder.Setup(_ => _.IsSimpleValue("ToString()")).Returns(false); var fieldInfo = new DataSourceFieldInfo(); _dataSourceFieldInfoProvider .Setup(_ => _.TryGet("Projects", "Name", userId)) .Returns(fieldInfo); DataSourceFieldInfo resultFieldInfo; var result = _target.IsAccessible(expression, currentDataSource, userId, out resultFieldInfo); result.Should().BeTrue(); }
private static void SetSelectItemInfoFromField(DslFormatItem formatItem, DataSourceFieldInfo field) { if (string.IsNullOrEmpty(formatItem.DisplayName)) { formatItem.DisplayName = field.Name; } if (string.IsNullOrEmpty(formatItem.Description)) { formatItem.Description = field.Description; } }
public bool IsAccessible(string value, string dataSourceName, long userId, out DataSourceFieldInfo fieldInfo) { fieldInfo = null; var exprValues = GetSeparatedValues(value); var currentDataSourceName = dataSourceName; var lastSimpleValue = exprValues.LastOrDefault(_ => _queryVariableNameBuilder.IsSimpleValue(_)); if (string.IsNullOrEmpty(lastSimpleValue)) { return(true); } foreach (var exprValue in exprValues) { var isSipleValue = _queryVariableNameBuilder.IsSimpleValue(exprValue); if (!isSipleValue) { continue; } if (exprValue == lastSimpleValue) { break; } var entityName = _queryEntityNamePropertyTypeNameResolver.ResolvePropertyTypeName( currentDataSourceName, exprValue); var isCanReadCurrentDataSource = _dataSourceAccessValidator.CanReadSource(entityName, userId); if (!isCanReadCurrentDataSource) { return(false); } currentDataSourceName = exprValue; } if (!string.IsNullOrEmpty(lastSimpleValue)) { fieldInfo = _dataSourceFieldInfoProvider.TryGet(currentDataSourceName, lastSimpleValue, userId); } return(true); }