ASP NET MVC 验证安全问题

本文关键字:安全 问题 验证 MVC NET ASP | 更新日期: 2023-09-27 18:37:17

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

-> 在"活动"实体的每个设置器中?似乎打破了干燥。

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

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

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

ASP NET MVC 验证安全问题

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

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

如何使用配置文件基类?