1

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

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

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

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

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

4

1 回答 1

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

我如何使用 Profilebase 类?

于 2012-07-03T18:44:51.377 回答