【发布时间】:2016-03-02 05:40:10
【问题描述】:
我遇到需要来自多个数据库表的数据的情况。
表 1 - 包含需要在前端 html 上显示的列列表,角剑道网格 - 可通过单独的管理员配置进行配置。
表2(其他一些表的连接)-有需要在角度前端显示的数据。
我目前使用的 linq 如下。
查询 1:获取要在 Grid 上显示的列列表
var columns = from cols in _context.columns
select cols.colNames;
查询2:获取列表的实际数据
var data = from cust in _context.customer
join details in _context.custDetails on cust.id equals details.custid
join o in _context.orders on cust.id equals o.custid
where cust.id == XXXX
select new Customer
{
Id = cust.Id,
Name = cust.Name,
Address = details.Address,
City = details.City,
State = details.State,
OrderDate = o.OrderDate,
Amount = o.Amount
//15 other properties similarly
};
将 IQueryable 类型返回给 Kendo DataSourceRequest
目前,从我的用户界面中,我已经进行了两次 api 调用,一次用于列,一次用于获取实际数据,并显示/隐藏列表中配置的列。
但问题是,如果有人查看网络或浏览器工具上的 api 调用,他们可能会看到为要隐藏的列返回的数据,这是一个安全问题。
我正在为我的 api 寻找一个查询,它使用第二个查询返回数据,该查询应该足够聪明,可以仅为配置的列(可能有 30 个不同的列)发送数据,并将其他属性设置为 null 或不根本不选择它们。有些属性在用于其他目的时需要始终返回。
我搜索了很多关于如何使用配置的列生成动态 linq 选择的资源。
请有人帮我解决这个问题
【问题讨论】:
-
您的 Angular UI 正在调用 Web API,而 Web API 又依次调用 SQL,对吗?并且您以某种格式(可能是 JSON 格式)将数据返回到 UI?那么你想在哪里加密?在客户端和 Web API 之间还是在 Web API 和 SQL 之间?
-
@Viru 我认为他想过滤数据,这样就不会从服务器传输敏感数据,而不仅仅是加密它,这会让任何用户在浏览器调试工具中看到敏感数据。跨度>
-
@JoachimIsaksson 明白了,谢谢
-
@Shashi 那么哪些列被配置为显示/隐藏......数据库中是否有这些信息?还是在某个配置文件中?
-
@Viru 是的,数据以 JSON 格式返回到 ui,配置在数据库中,我不希望数据被加密,因为它与我在配置时想要显示的数据相同显示
标签: c# .net entity-framework linq kendo-asp.net-mvc