ASP NET MVC验证安全问题

时间:2012-06-13 18:14:11

标签: c# asp.net-mvc validation domain-driven-design

我开始开发一个ASP NET MVC 3应用程序,我试图遵循一些好的DDD实践。我有以下情况需要意见。 系统功能之一是创建系统的一个或多个用户将参与的活动,例如会议。具有特定访问配置文件的任何用户都可以创建新活动,也许只有创建活动的用户才能更改她。问题是: 插入此规则的正确位置是什么?

- >在每个“活动”实体的制定者?似乎打破了DRY。

- >在保存更改时的存储库中?在这种情况下,传递用户权限的正确时刻是什么? 这个方法还有一个参数?在类构造函数中(在我的模型中,存储库是接口,如果我采用此选项, 依赖关系只能在实现存储库的基础架构层中显式化吗?)

- >控制器?它似乎与贫血模型合作。

顺便问一下,问题比比皆是......你怎么看?

1 个答案:

答案 0 :(得分:1)

如果您使用的是ASP.NET成员资格,则可以利用角色和配置文件提供程序,并使用“授权”属性来限制对创建或编辑发生的实际视图的访问。例如,create动作可以是:

[Authorize(Roles="Activity Admin")]
public ActionResult CreateActivity()
{
    return View();
}

“活动管理员”是您的创作角色。然后你的编辑看起来像这样:

[Authorize(Roles="Activity Admin")]
public ActionResult EditActivity(int id)
{
    Activity activity = ActivityRepository.GetActivityByID(id);

    if (activity.CreatorID != CurrentUser.ID)
    {
        return RedirectToAction("Activities");
    }

    return View(activity);
}

if语句执行检查以确保当前登录用户是实际创建活动的用户。可以使用您用于检索当前登录用户的唯一ID的任何方法替换CurrentUser.UserID。我通常使用ProfileBase类来实现一个允许我跟踪当前用户信息的类。下面链接到另一个SO问题显示了如何做到这一点。

How can i use Profilebase class?