轻松地为角色提供程序使用ASP.NET标识

我花了最近两天用我现有的数据库研究和实现新的ASP.NET身份系统。 更多相关内容: 将ASP.NET标识集成到现有的DbContext中 。

现在,我有一个工作的UserStoreRoleStore ,但我似乎无法弄清楚如何在我的ASP.NET MVC 5应用程序中利用它们而不编写像我所有混淆的所有Identity样本中的大量代码。

我想要实现两件事:1)使用cookie来维护授权; 2)使用角色来限制应用程序访问,无论是在视图中还是在控制器上呈现的内容。

为了能够使用我需要的那些显然使用Controller.User属性,它代表授权用户并查看它的角色。 如何让我的Identity实现实现这一目标?

最后,在身份样本中,我看到他们正在使用OWIN,我可以得到它,但它似乎是一种超级迂回的方式,我仍然没有得到如何正确实现。 至于索赔,他们让我误解了我的两倍。

我很欣赏任何指向正确的方向。

回到这里后,我想我找到了一个简单有效的解决方案。 我最终为OWIN创建了一个启动配置类。 根据我的理解,因为OWIN是一个中间件,它拦截请求,计算出身份validation(如果有的话),并更新Controller类的User属性,其中UserClaimsIdentity类的一个实例。

之后,其他一切正常,就像您通常使用ASP.NET的User属性一样。 我确实使用名为UserId的额外属性扩展了我的基本Controller,该属性解析User属性以获取在数据库中使用的实际Id。 我的意图是让我可以查询我的DbContext使用的真实Employee类。 我们将看到是否保留,同时,这是我的StartupConfiguration的代码:

 public sealed class StartupConfig { public void Configuration( IAppBuilder app) { this.ConfigureAuthentication(app); } public void ConfigureAuthentication( IAppBuilder app) { app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/"), ExpireTimeSpan = new TimeSpan(0, 60, 0) }); } } 

以下是我配置UserId属性的方法:

 protected int UserId { get { return Convert.ToInt32(base.User.Identity.GetUserId()); } } 

不要忘记用[assembly: OwinStartupAttribute(typeof(namespace.StartupConfig))]装饰类。 希望这有助于某人。

您还记得将您的应用程序名称放在Web配置中吗?

       

在控制器中使用以下其中一项。

 [Authorize] //Anyone with authorization [Authorize(Roles="Administrator")] //Admin role only 

你也可以这样做。

 HttpContext.User.IsInRole("Administrator") UserManager.IsInRole(userID, "Administrator")