我想在下一个项目中使用ASP.NET动态数据,但是有一个无法解决的问题。在数据库中,我们以每行为基础管理授权。例如,不允许用户查看Contracts表的所有行。因此,合同与用户之间存在着多对多的关系。因此,每次动态数据执行选择以显示所有合同时,它必须查看ContractUsers联结表,以查看当前用户可以看到的合同(由UserID过滤,将存储在会话变量中)。当然,这些联结表应该对用户不可见。 默认情况下,动态数据返回表的所有行,因此是否可以为用户执行的每个查询自定义此行为? 我想将动态数据与LINQ to SQL一起使用,但如果使用Entity Framework更容易完成此任务,我也会考虑这一点。
感谢您的帮助和时间。
答案 0 :(得分:1)
在动态数据中实施此类解决方案可能需要创建自定义实体模板;不是很容易,但一旦完成,就不需要仅仅编辑页面模板就可以创建自定义页面。
我认为检查由S.J.Naughton完成的关于DD的出色工作并在他的blog上展示是非常有用的。
问候,F。
答案 1 :(得分:0)
您不应该使用动态数据,因为您需要完全控制查询并手动编写所有linq查询以添加数据级安全性。如果您仍然坚持动态数据,请注意您仍然会自己编写大部分页面,并且只使用动态模板。您必须手动定义任何数据源,并根据已记录的用户正确传递where条件以过滤结果。
此外,linq-to-sql无法隐藏联结表,只有当联结表只包含两个用于多对多关系的FK时,实体框架才能够这样做。如果此表包含您要在应用程序中使用的任何其他列,则必须将其映射为任何其他实体,动态数据将其显示为实体。
动态数据是用于快速创建简单应用程序的技术,您需要通过Web界面提供对数据库的访问,但您所描述的并不是一个简单的场景。您需要每个记录授权,这些授权可能因实体类型而异。