行级安全性

时间:2011-10-03 20:25:32

标签: asp.net-mvc security linq-to-sql

如何阻止用户仅更新数据库中的行。

例如: 用户负责学校。他们可以改变那所学校的领域,但只能改变那所学校。

因此:SchoolId,OwnerID,Name,PhoneNumber

我实现了一个功能: CanEditSchool(SchoolID)如果用户不是特定学校的所有者,则会抛出异常。

有更好的解决方案吗?我正在使用linq2sql作为orm。

3 个答案:

答案 0 :(得分:1)

根据您处理datacontext的方式,您可以在datacontext上使用LoadOptions。

http://msdn.microsoft.com/en-us/library/Bb386915(v=VS.90).aspx

答案 1 :(得分:0)

一个似乎不是最优的解决方案是为用户创建一个视图,其中只包含其辖区内的学校:

CREATE VIEW `v_jimmy` AS
    SELECT * FROM `schools`
    WHERE SchoolId = 5;

答案 2 :(得分:0)

您的控制器操作应检查您的安全功能,以确保登录用户能够编辑相关项目。如果没有,您应该将它们发送到“拒绝许可”类型的页面/视图。

但是,CanEditSchool函数不需要抛出异常。它的名字暗示它将返回bool; true如果他们可以编辑它,false如果没有。