我目前正在运行一个非常简单的设置。此设置包含实体框架项目和IIS服务器。 IIS配置为使用Windows身份验证。
现在在我的项目中,我想只允许某些用户访问某些控制器。在组织内部,我正在为那里的“权限”工作。 system,一个表,包含允许用户访问哪些数据的表。因此,我想获取用户登录的电子邮件,并根据数据库检查是否有权限。
我这样做的计划是制作一个单独的代码,这些代码无法从网络上访问,其中包含函数" boolean hasPermissions(String email,byte permissions)"。但是我不知道在哪里放置它,我也找不到任何相关信息。我的想法是正确的方法吗?如果,那么如何正确执行这种方法呢?
答案 0 :(得分:1)
您应该使用Windows身份验证,使用IPrincipal,您将拥有一个用户对象,您可以要求IsInRole用于基于特定角色的安全性而非位/布尔
在Asp.net windows authentication
阅读所有相关信息以及如何实施IPrincipal Implement custom security
代码示例: 用户对象:
public class User : IPrincipal
{
private readonly IPrincipal _user;
public IIdentity Identity { get; private set; }
public User (IPrincipal user)
{
Identity = user.Identity;
_user = user;
}
public bool IsInRole(string role)
{
return _user.IsInRole(role);
}
}
在MVC中添加过滤器
public class CustomAuthenticationAttribute : ActionFilterAttribute, IAuthenticationFilter
{
public void OnAuthentication(AuthenticationContext filterContext)
{
var user= new User (HttpContext.Current.User);
Thread.CurrentPrincipal = user;
}
}
使用
将过滤器添加到FilterConfigfilters.Add(new CustomAuthenticationAttribute());
然后,在您的应用程序中使用用户对象时
var user = new User(Thread.CurrentPrincipal);
if(user.IsInRole("admin")) /* do the choka choka */;