如何在ASP.NET实体框架中处理Microsoft身份验证

时间:2015-09-04 06:06:33

标签: c# asp.net .net entity-framework

我目前正在运行一个非常简单的设置。此设置包含实体框架项目和IIS服务器。 IIS配置为使用Windows身份验证。

现在在我的项目中,我想只允许某些用户访问某些控制器。在组织内部,我正在为那里的“权限”工作。 system,一个表,包含允许用户访问哪些数据的表。因此,我想获取用户登录的电子邮件,并根据数据库检查是否有权限。

我这样做的计划是制作一个单独的代码,这些代码无法从网络上访问,其中包含函数" boolean hasPermissions(String email,byte permissions)"。但是我不知道在哪里放置它,我也找不到任何相关信息。我的想法是正确的方法吗?如果,那么如何正确执行这种方法呢?

1 个答案:

答案 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;
        }

  }

使用

将过滤器添加到FilterConfig
filters.Add(new CustomAuthenticationAttribute());

然后,在您的应用程序中使用用户对象时

var user = new User(Thread.CurrentPrincipal); 
if(user.IsInRole("admin")) /* do the choka choka */;