C# 使用MVC进行Windows身份验证。具有不同“访问级别”的Windows身份验证

C# 使用MVC进行Windows身份验证。具有不同“访问级别”的Windows身份验证,c#,asp.net-mvc-4,authentication,razor,windows-authentication,C#,Asp.net Mvc 4,Authentication,Razor,Windows Authentication,我是MVC和身份验证的新手 我们正在开发一个将使用Windows身份验证的MVC应用程序。我们首先在HTML中使用razor解决了这个问题,如下所示: @if (HttpContext.Current.User.IsInRole("somerole") || HttpContext.Current.User.IsInRole("somerole") || HttpContext.Current.User.IsInRole("somerole")) USER string windowsauth

我是MVC和身份验证的新手

我们正在开发一个将使用Windows身份验证的MVC应用程序。我们首先在HTML中使用razor解决了这个问题,如下所示:

@if (HttpContext.Current.User.IsInRole("somerole") || HttpContext.Current.User.IsInRole("somerole") || HttpContext.Current.User.IsInRole("somerole"))
USER
string windowsauth
int accesslevel
public class BaseModel{
    List<string> AuthRoles {get;set;}

    public BaseModel(List<string> authorisedRoles){
        AuthRoles = authorisedRoles;
    }

    public BaseModel(){
         AuthRoles = new List<string>();
    }
}
但从长远来看,这是行不通的,因为我们希望能够在数据库中添加/删除某个windows auth应该能够看到/看不到的特定视图。换句话说,我们需要比上面的例子更加灵活/动态

假设我们的用户数据库如下所示:

@if (HttpContext.Current.User.IsInRole("somerole") || HttpContext.Current.User.IsInRole("somerole") || HttpContext.Current.User.IsInRole("somerole"))
USER
string windowsauth
int accesslevel
public class BaseModel{
    List<string> AuthRoles {get;set;}

    public BaseModel(List<string> authorisedRoles){
        AuthRoles = authorisedRoles;
    }

    public BaseModel(){
         AuthRoles = new List<string>();
    }
}
如果我们有一个具有windowsauth域用户和accesslevel 1的用户,我希望该用户能够查看所有页面

另一个具有windowsauth的用户和另一个具有accesslevel 2的用户只能看到某些页面


我们不知道如何解决这个问题,我希望我的问题足够清楚。任何帮助都会很好

您可以创建一个基本模型,其中包含当前视图的授权角色列表。然后,您可以执行以下操作:

@if(Model.AuthRoles.Any(r=>HttpContext.Current.User.IsInRole(r))
因此,您的基本模型可以如下所示:

@if (HttpContext.Current.User.IsInRole("somerole") || HttpContext.Current.User.IsInRole("somerole") || HttpContext.Current.User.IsInRole("somerole"))
USER
string windowsauth
int accesslevel
public class BaseModel{
    List<string> AuthRoles {get;set;}

    public BaseModel(List<string> authorisedRoles){
        AuthRoles = authorisedRoles;
    }

    public BaseModel(){
         AuthRoles = new List<string>();
    }
}
然后,在填充模型时,可以从数据库中加载授权角色

在这一点上也要对角色进行检查,并进行必要的重新指导


您可以使用类似的前提在站点中构建导航栏。

谢谢,我将尝试一下: