C# MVC 4应用程序、Windows身份验证和存储在数据库中的自定义角色

C# MVC 4应用程序、Windows身份验证和存储在数据库中的自定义角色,c#,asp.net-mvc,windows,asp.net-mvc-4,authentication,C#,Asp.net Mvc,Windows,Asp.net Mvc 4,Authentication,各位早上好, 我对我的MVC4应用程序有以下要求 使用windows凭据进行身份验证(自动) 一旦通过身份验证,应用程序中的特定页面/视图/控制器将根据一组数据库表中定义的角色进行限制 编辑 以下是我迄今为止所尝试的: 将我的MVC应用程序设置为使用Windows身份验证 把这个放在我的Global.asax文件中 if(HttpContext.Current.User!=null) { 字符串[]角色={“testmyrole”}; GenericPrincipal=新的GenericPrin

各位早上好,

我对我的MVC4应用程序有以下要求

  • 使用windows凭据进行身份验证(自动)
  • 一旦通过身份验证,应用程序中的特定页面/视图/控制器将根据一组数据库表中定义的角色进行限制
  • 编辑

    以下是我迄今为止所尝试的:

  • 将我的MVC应用程序设置为使用Windows身份验证
  • 把这个放在我的Global.asax文件中

    if(HttpContext.Current.User!=null) { 字符串[]角色={“testmyrole”}; GenericPrincipal=新的GenericPrincipal(HttpContext.Current.User.Identity,角色); Thread.CurrentPrincipal=HttpContext.Current.User=principal; bool test=User.IsInRole(“testmyrole”); }

  • 但是HttpContext.Current.User始终为空

    字符串[]角色最终将通过调用数据库来填充。。。硬代码现在只用于测试

    我可以把上面的代码放在我的MVC应用程序中的什么地方,这样无论称为什么视图,该代码都可以运行,这样我就可以填充角色,然后在我的其他控制器中使用以下代码

    [Authorize(Roles ="testmyrole")]
    public ActionResult Index()
    {
    ... do other fun stuff here
    }
    
    谢谢你抽出时间


    科里

    我想我可能已经找到了解决问题的办法

    以下是我所做的:

  • 修改了my viewStart.CSHTML文件,如下所示:
  • @使用SMTRApp.Business

    @使用System.Security.Principal

    @使用系统线程

    @{ 
        Layout = "~/Views/Shared/_Layout.cshtml";
        string[] roles = BusinessLayer.BLGetUserRoles(User.Identity.Name).ToArray();
        GenericPrincipal principal = new GenericPrincipal(User.Identity, roles);
        Thread.CurrentPrincipal = System.Web.HttpContext.Current.User = principal;
    }
    
    然后,我能够在控制器的开头添加以下代码,以实现基于SQL角色的安全性:

    [Authorize(Roles = "Accounting, Analyst, ETL")]
    
    有没有比这更好的方法来实现基于角色的安全性,无论如何调用视图

    任何想法都将不胜感激


    科里

    你好……只是一些友好的建议。除非你先尝试,否则你很难从任何人那里得到“详细”的解决方案。