0

我怀疑应该在哪里完成权限。例如,我有一个 PersonController,它有两个方法,一个 HttpGet create 和一个 HttpPost create,我正在使用一个与存储库层通信的服务层。现在,最好的方法是什么?

1:

[HttpPost]
public ActionResult Create(Person person)
{
    if (ModelState.IsValid)
    {
        new PersonService().Save(person, (int)Session["UserId"]);//I check here permission here

        return RedirectToAction("Home","Home");
    }

    return View();
}

2:

    [HttpPost]
    public ActionResult Create(Person person)
    {
        if (ModelState.IsValid)
        {
            var personService = new PersonService();

            if(personService.UserHasPermission((int)Session["UserId"]){
                 personService.Save(id);
            }

            return RedirectToAction("Home","Home");
        }

        return View();
    }

换句话说,我应该在业务层还是在控制器中做呢?

4

2 回答 2

0

这是一个无论“UI”技术如何都应该实现的业务细节,所以我建议检查业务层而不是控制器的访问权限。

如果您要创建类似 Web 服务或任何其他需要调用 PersonService.Save(id) 的 UI,这将使您无需重新实现即可保持 DRY

于 2012-10-02T21:33:15.987 回答
0

这取决于您是在谈论访问资源的权限还是在您的域中执行操作的权限。

您应该使用[Authorize]属性来控制对资源的访问。例如:

URL /admin/index应该只对管理员可用。

您应该使用您的域来强制执行特定操作的业务逻辑。例如:

只有满足条件 C,用户 A 才能执行操作 B。

您应该根据场景混合使用这两种做法。

于 2012-10-03T01:25:14.433 回答