检查权限的最佳做法

时间:2012-10-02 20:00:12

标签: asp.net-mvc

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

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();
    }

换句话说,我应该在业务层或控制器中进行吗?

2 个答案:

答案 0 :(得分:0)

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

如果您要创建类似Web服务或任何其他需要调用PersonService.Save(id)

的UI,这将允许您不必重新实现这一点来保持DRY。

答案 1 :(得分:0)

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

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

  

网址 / admin / index 只应供管理员使用。

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

  

如果满足条件C,用户A只能执行操作B.

您应该根据情景混合两种做法。