2015-09-04 72 views
1

我目前有一个非常简单的安装程序运行。该设置由一个实体框架项目和一个IIS服务器组成。 IIS被配置为使用Windows身份验证。如何在ASP.NET Entity Framework中处理Microsoft身份验证

现在在我的项目中,我只想让某些用户访问某些控制器。在我工作的组织内部,有一个“权限”系统,一个包含允许用户访问什么数据的表格。所以,我想获取用户登录的电子邮件,并检查数据库是否有权限。

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

回答

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

    } 

而且使用

filters.Add(new CustomAuthenticationAttribute()); 

然后,用你的应用程序

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

我有这个想法内的用户对象时过滤器添加到您的一个FilterConfig你确实是对的,而这正是我需要的。然而,我现在一直在考虑最近两个小时,而且我不知道如何实现这一点。你会有我的代码示例吗?主要关于如何获取用户对象以及认证码的放置位置。 –

+0

为您添加了一个代码示例 – Thorarins

+1

非常感谢。我做了一个编辑建议,其中包含我必须使其适应的适应性。这对于像我这样的未来新手来说,他们不知道什么是什么。 –