【问题标题】:ASP NET MVC Validation Security IssueASP NET MVC 验证安全问题
【发布时间】:2012-06-16 18:22:22
【问题描述】:

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

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

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

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

顺便说一句,问题比比皆是……你怎么看?

【问题讨论】:

  • 在您的应用程序服务中?

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


【解决方案1】:

如果您使用 ASP.NET Membership,您可以利用 Roles 和 Profile 提供程序并使用 Authorize 属性来限制对发生创建或编辑的实际视图的访问。例如,创建操作可以是:

[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 问题的链接显示了如何做到这一点。

How can i use Profilebase class?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多