Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET实体框架中处理Microsoft身份验证_C#_Asp.net_.net_Entity Framework - Fatal编程技术网

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

C# 如何在ASP.NET实体框架中处理Microsoft身份验证,c#,asp.net,.net,entity-framework,C#,Asp.net,.net,Entity Framework,我目前有一个非常简单的设置正在运行。此设置由实体框架项目和IIS服务器组成。IIS配置为使用windows身份验证 现在在我的项目中,我希望只允许某些用户访问某些控制器。在我工作的组织中,有一个“权限”系统,一个包含允许哪些用户访问哪些数据的表。因此,我想获取用户登录时使用的电子邮件,并对照数据库进行检查,以查看他是否具有权限 我这样做的计划是制作一段单独的代码,这段代码不能从web访问,它包含函数“boolean hasPermissions(String email,byte permiss

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

现在在我的项目中,我希望只允许某些用户访问某些控制器。在我工作的组织中,有一个“权限”系统,一个包含允许哪些用户访问哪些数据的表。因此,我想获取用户登录时使用的电子邮件,并对照数据库进行检查,以查看他是否具有权限


我这样做的计划是制作一段单独的代码,这段代码不能从web访问,它包含函数“boolean hasPermissions(String email,byte permissions)”。但我不知道该放在哪里,也找不到任何相关信息。我想的是正确的方法吗?如果,那么如何正确执行此方法?

您应该使用windows身份验证,使用IPrincipal,您将拥有一个用户对象,您可以向IsInRole请求特定的基于角色的安全性,而不是位/布尔值

阅读所有关于它的文章

以及如何实施IPrincipal

代码示例: 用户对象:

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

  }
并使用将该过滤器添加到过滤器配置中

filters.Add(new CustomAuthenticationAttribute());
然后,在应用程序中使用用户对象时

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

我认为你确实是对的,这正是我所需要的。然而,在过去的两个小时里,我一直在四处寻找,我不知道如何实现这一点。你能给我一些代码示例吗?主要介绍如何获取用户对象以及在何处放置身份验证代码。非常感谢。我做了一个编辑建议,其中包含了我必须进行的调整,以使其正常工作。这是给像我这样的未来新人的,他们不知道做什么。