【问题标题】:How to secure MVC4 area for admins from custom SQL "AdminUsers" table如何从自定义 SQL“管理员用户”表中保护管理员的 MVC 4 区域
【发布时间】:2012-12-09 04:10:29
【问题描述】:

我已经看到了许多使用令牌、roleprovider 和 memberprovider 保护 MVC 应用程序的示例,但没有一个完全适合我的场景。这是我的设置..

  • VS2012 使用 EntityFramework 4.3 链接到 SQL 2008 R2 管理数据。
  • 项目在 IIS 中设置为基本身份验证,因此所有拥有 empID 的教职员工和学生都可以在内部或外部进行身份验证。其中一些人是管理员,因此他们在管理区域进行管理。
  • 我在我的项目中创建了一个“管理”区域,该区域当前没有安全性,因此任何人都可以键入域/管理员并被重定向到该区域。该区域包含管理员用户 (CRUD)、约会 (CRUD)、设置 (U)、工具和报告功能。 adminUser 和约会部分有自己的表,并且 CRUD 按预期工作。

这就是我要问的.. 如何从我的 AdminUsers sql 表中针对“管理员”验证基本身份验证当前用户,然后只允许这些人访问我的管理区域?

感谢您的宝贵时间, 克里斯

【问题讨论】:

    标签: c# asp.net-mvc-4 entity-framework-4.3 asp.net-mvc-areas asp.net-authorization


    【解决方案1】:

    如果您不打算依赖成员资格或角色,您始终可以编写AuthorizeAttribute 的自定义实现来检查用户与数据库。

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class AdminOnlyAttribute : AuthorizeAttribute
    {
        public AdminOnlyAttribute()
        {
        }
    
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (!User not in Admin table)
            {
              throw new UnauthorizedAccessException();
            }
            base.OnAuthorization(filterContext);
        }
    }
    

    或者类似的东西。然后当然是:

    [AdminOnly]
    public class AdminController : Controller
    {
        // ...
    }
    

    【讨论】:

    • 谢谢布拉德..还有几个问题。这是构造函数吗?公共 AdminOnlyAttribute() { }?我究竟如何使用这种方法?我的控制器如何知道 [AdminOnly]?我想将用户重定向到另一个操作,例如应用程序的主页,并在页面顶部给他们一个类似“未经授权”的视图。感谢您的帮助
    • @foxtrotZulu:您可以指定filterContext.Result = new ViewResult { ViewName = "Unauthorized" };,并且您需要装饰使用[AdminOnly] 的控制器。我把 CTor 留在那里,以防你想为属性添加额外的参数。
    • 一件小事帮助我在管理区域内从我的 _unauthorized 视图重定向。我无法重定向回根索引,它始终默认为 domain/admin/home/index,而我想转到 domain/home/index。所以actionlink如下...
      @Html.ActionLink("Home", "Index", "Home", new { area = "" }, null)
      .. .确保将“区域”设置为空,以便可以缩放回根索引。
    猜你喜欢
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多