【发布时间】:2014-04-18 21:58:51
【问题描述】:
请注意,赏金正在询问此问题的已编辑部分。第一部分是描述问题
我有一张桌子
Customer
-----
Name
Address
SocialSecurity
Phone
Etc....
我还有一张桌子叫
Permissions
-----
IdOfUser
Can_C_Address
Can_R_Address
Can_U_Address
Can_D_Address
Can_C_Phone
Can_R_Phone
Can_U_Phone
Can_D_Phone
Etc...
注意 CRUD 代表创建、读取、更新和删除
我如何确保在服务器端用户查询数据库为:
contex.Customers.ToList();
假设向 wcf 数据服务发出该请求的用户无权查看社会保障。 我希望该列表返回null 社会安全号码。我该怎么做?
将每个属性/tableColumn 分成不同的实体需要做很多工作。例如,将 CustomerPhone、CustomerSocial 等都作为不同的实体。
---------------------------------------- 编辑 ------ --------------------------------
我找到了一个奇怪的解决方案!我不知道它是否安全。这里是:
假设我有一个名为用户的实体。用户有电话号码、社保号、地址等。我的问题是,例如,当有人查询数据库时,我想隐藏社保号。 为了解决这个问题,我创建了一个与实体同名的操作/方法 换句话说,我添加了方法:
[WebGet]
public IEnumerable<Data.Sub.User> Users()
{
return this.CurrentDataSource.Users.ToList().Select(x => { x.SocialSecurity = ""; return x; });
}
然后在我做的时候在我的客户端:
var context = new Data.DatabaseReference.MyEntity();
context.Users.ToList(); // WHEN I INVOKE THAT METHOD I SEE THAT I NEVER GET SOCIAL SECURITY!
采用这种方法是否安全?
【问题讨论】:
-
我敢打赌,您可以制作一个使用反射的有点混乱的解决方案,但在这里发布作为答案会有点长。
-
我已在此处stackoverflow.com/questions/23203482/… 发布了您的另一个 stackoverflow 问题,该问题适用于根实体,但不适用于导航属性。
-
您使用的是什么提供商? EF 还是反射提供者?
-
我已经启动并运行了解决方案,但是在堆栈溢出时发布所有代码有点大,我可能只是发布一般想法并在我的博客上发布更多代码。另外我需要清理它。我选择了#3。因为你不是唯一一个想要它的人,我什至在 WCF 数据服务进入维护模式之前就想要它。
标签: c# linq wcf-data-services queryinterceptor