【发布时间】:2011-11-15 17:47:48
【问题描述】:
我在 SQL Server 上使用 EF Code First 继承了一个相当大且复杂的 ASP.NET MVC3 Web 应用程序。它使用带有数据库身份验证的 ASP.NET 成员角色。控制器操作由派生自 AuthorizeAttribute 的属性保护,这些属性将角色映射到操作。有更精细的扩展方法,例如向特定角色显示特定小部件。这很好用,我对当前的安全模型有很好的了解。
我被要求在数据级别提供更细粒度的安全性。例如,“客户”用户只能看到与他们自己相关联的数据(整个数据库),而不能看到与其他客户相关的数据。问题是“客户”只是 5 种不同类型中的一种,它们有自己的特定限制(9 种角色中的每一种都是这 5 种类型中的一种)。
我能想到的最好的事情是遍历所有数据存储库,并使用针对每种用户类型的过滤器扩展每个 LINQ 语句/查询。即使我有时间,这似乎也不是最优雅的方式。
有什么建议吗?我真的不知道从哪里开始,所以任何事情都会有所帮助。
非常感谢。
【问题讨论】:
-
这是一个很好的开始方式,但是如果您需要拥有可以查看其他人数据的超级用户,这将变得更加复杂。希望所有查询都通过某种服务层完成。这样就很容易在任何复杂程度的情况下加入安全性。不要忘记保护更新。 (用户 A 不能修改用户 B 的数据。)
标签: asp.net-mvc c#-4.0 entity-framework-4