我开始开发一个ASP NET MVC 3应用程序,我试图遵循一些好的DDD实践。我有以下情况需要意见。 系统功能之一是创建系统的一个或多个用户将参与的活动,例如会议。具有特定访问配置文件的任何用户都可以创建新活动,也许只有创建活动的用户才能更改她。问题是: 插入此规则的正确位置是什么?
- >在每个“活动”实体的制定者?似乎打破了DRY。
- >在保存更改时的存储库中?在这种情况下,传递用户权限的正确时刻是什么? 这个方法还有一个参数?在类构造函数中(在我的模型中,存储库是接口,如果我采用此选项, 依赖关系只能在实现存储库的基础架构层中显式化吗?)
- >控制器?它似乎与贫血模型合作。
顺便问一下,问题比比皆是......你怎么看?
答案 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问题显示了如何做到这一点。