我是MVC和身份验证新手。
我们正在开发一个将使用Windows身份验证的MVC应用程序。我们首先在HTML中使用razor来解决它:
@if (HttpContext.Current.User.IsInRole("somerole") || HttpContext.Current.User.IsInRole("somerole") || HttpContext.Current.User.IsInRole("somerole"))
但是从长远来看这不会起作用,因为我们希望能够在数据库中添加/删除某个Windows身份验证应该能够看到/看不到某个视图。换句话说,我们需要它比上面的例子更灵活/更动态。
假设我们的用户数据库看起来像这样:
USER
string windowsauth
int accesslevel
如果我们有一个用户使用windowsauth"域用户"和访问级别1,我希望该用户能够看到所有页面。
另一个用户使用windowsauth"其他用户"使用accesslevel 2只能看到某些页面。
我们不知道如何解决这个问题,我希望我的问题足够明确。任何帮助都会很棒!
答案 0 :(得分:0)
您可以创建一个基本模型,其中包含当前视图的授权角色列表。然后你可以做类似的事情:
@if(Model.AuthRoles.Any(r=>HttpContext.Current.User.IsInRole(r))
所以你的基础模型看起来像这样:
public class BaseModel{
List<string> AuthRoles {get;set;}
public BaseModel(List<string> authorisedRoles){
AuthRoles = authorisedRoles;
}
public BaseModel(){
AuthRoles = new List<string>();
}
}
然后,当您填充模型时,可以从数据库中加载授权角色。
此时也要对角色进行检查并进行必要的重定向。
您可以使用类似的前提在您的网站中构建导航栏。