【问题标题】:ASP.NET MVC Design Question Where to put specific user / "access level" codeASP.NET MVC 设计问题在哪里放置特定用户/“访问级别”代码
【发布时间】:2010-01-25 20:55:17
【问题描述】:

所以,我已经成功实现了我自己的 MembershipProvider,它的工作方式完全符合我的预期。

我已经用 [Authorize] 属性修饰了我的控制器动作,这也完全按照我的意愿工作。

我的问题是,我应该将决定使用“多少”访问权限的代码放在哪里?

[Authorize] 仅表示当前用户是系统的有效用户。当前用户的 UserAccess = 1、或 2、或 4、或 8 或其他。我会在 Controller 方法中执行此检查吗?还是应该将用户传递给我的 Repository 类,并让 Repository 类只返回当前用户有权访问的那些记录?

换句话说,分离这种担忧的最佳方法是什么?因为它与身份验证有关。我在想我应该将用户传递给 Repository.GetData() 方法,并让它执行必要的查找。

这个问题的第二部分,我如何根据用户限制对特定视图的访问?例如,如果当前用户的 UserAccess = 2,我想省略一些字段,但如果它的 UserAccess = 4,我想显示所有字段。

更新

经过更多研究,如果我实现自己的 RoleProvider,我似乎可以用一块石头杀死两只鸟——我知道我可以如何做到这一点来限制控制器 [Authorize(Roles = "Admin)] 上的数据访问,并且它看起来对我来说是最好的选择。如何使用它根据角色以不同方式呈现我的视图?我会制作单独的视图并从控制器返回正确的视图吗?还是使用内嵌 C# 制作一个视图?

【问题讨论】:

    标签: c# .net asp.net-mvc authentication


    【解决方案1】:

    您问题的第一部分:保持控制器精简并将访问级别代码放在您的存储库类/模型中。您问题的第二部分:您可以为每个访问级别创建不同的视图。或者您可以将逻辑放在视图本身中以检查用户的访问级别,但这相当不安全且不安全。我只想让视图不呈现任何从模型返回的空/空字段。

    【讨论】:

    • 我就是这么想的,控制器尽量精简。
    【解决方案2】:

    您可以制作自己的 AuthorizeAttribute,它采用参数中执行此操作所需的 UserRole。

    [CustomAuthorize(UserRole.Administrator)]
    public ActionResult YourAction()
    {
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多