我正在ASP.Net MVC中构建一个应用程序来记录任务。
用户只能删除自己的任务。是否有一种标准方法可以阻止不同的登录用户,只需在删除控制器URL中输入一个属于另一个用户的任务的[id]参数,从而删除另一个用户任务?
示例:
用户A的任务ID为13.当用户A查看任务时,会有一个指向/ tasks / delete / 13的链接以删除任务记录。用户B可以查看任务13,然后决定在地址栏中输入/ tasks / delete / 13,从而删除用户A的任务。
您是否必须在控制器中编写自己的代码以防止这种情况发生,或者通常是否采用标准方式处理这些代码?
非常感谢!
答案 0 :(得分:1)
NerdDinner应用程序在其Dinners控制器中就是这样一个例子。
http://nerddinner.codeplex.com/
有关如何执行此操作的说明如下:
http://nerddinnerbook.s3.amazonaws.com/Part9.htm
走到页面的一半,直到看到标题:在创建晚餐时使用User.Identity.Name属性和在编辑晚餐时使用User.Identity.Name属性。< / em>的
答案 1 :(得分:1)
对于ASP.NET MVC中的安全性,您具有身份验证和授权。
身份验证是验证用户身份的过程,通常涉及检查数据库的用户名和密码,然后为该用户分配某种用户ID。
授权是限制对系统资源的访问的过程,通常通过角色(RBAC)来完成。但是,角色通常不会涵盖您所拥有的所有权。
在您的情况下,您需要编写自己的代码来执行任务的所有权检查,例如:
if (!task.IsOwnedBy(userID))
{
throw new HttpException ((int)HttpStatusCode.Unauthorized,
"You are not authorized.");
}
我在这里问了一个类似的问题How do you weave Authentication, Roles and Security into your DDD?,还没有决定我将如何将它整合到我的业务层。