3

我有一个多层(但不是多层)ASP.NET 应用程序,它需要检查登录用户是否有权查看/编辑实体。我可以想到几个实现:

a) 检查用户是否有权使用 ActionFilter 在 UI 中查看/编辑实体

b) 检查用户是否有权使用 AOP 查看/编辑 ServiceLayer 中的实体

c) 两者都做?

如果您不同意 a)、b) 或 c),您认为我应该在我的软件应用程序的哪个层检查用户授权?

4

3 回答 3

1

以我个人的经验,在更广泛的层面上,我发现需要同时做这两个 (c)。我必须验证操作以及服务层中的权限。对于这种特定情况,让操作过滤器调用您的服务层可能是有意义的,或者首先检查权限并且不完全呈现查看/编辑功能。

您本质上是在谈论细粒度的权限;我不知道您为此使用了什么数据存储。确保您采用任何方法来计划效率/性能。

于 2013-02-12T16:41:59.003 回答
0

验证用户是否可以看到实体太宽泛?如果用户只能与实体的特定方面进行交互,而不能与其他方面进行交互呢?

我倾向于将安全性视为“用户可以执行请求的过程/操作”。该过程可能与 1 个或多个实体交互。

因此,我倾向于通过操作过滤器验证用户身份和/或验证特定于上下文的视图模型。如果执行到达控制器操作,您可以假设幸福路径。如果出现问题,所有其他验证/身份验证都已经发生并绕过该操作。

于 2013-02-12T16:40:30.987 回答
0

您可以将 [Authorize] 放在要在 Web 层顶部授权的控制器顶部,例如:您有一个操作:添加您有一个控制器:区域

[Authorize]
    public class areaController : Controller
    {



        public ActionResult add()
        {

            return View();
        }

在此示例中,未登录时无法添加区域

于 2014-10-11T05:49:32.320 回答