如何检查用户在asp.net身份中有很多角色

嗨,我需要检查一个用户是否在其中一个角色,我对我找到的不同版本的代码感到困惑。 让我先告诉你我现在的情况

_manager = new UserManager(new UserStore()); var currentUser = _manager.FindById(User.Identity.GetUserId()); if (!_manager.IsInRole(currentUser.Id, "admin")) { } 

和ApplicationUser

 public class ApplicationUser : IdentityUser { } public class ApplicationDbContext : IdentityDbContext { } 

所以我想检查用户是否处于其中一个角色。 例如admin,controbutor,superuser等

我发现这个例子似乎很好但我必须在web.config中进行以下更改才能使其正常工作。 我不需要像我现在那样使用我的代码。

 roleManager enabled="true" 

我尝试更多关于UserManager.IsInRole研究,但我找不到很多关于它的内容。 更多阅读我理解我发现的post是关于简单会员。

当我使用Identity时,我不应该使用我找到的代码(指链接和接受的答案),因为这将混合身份和简单成员身份? 特别是我引用这行Roles.GetRolesForUser 。 身份有类似的方法吗? 我认为我对不同的成员资格框架感到困惑,不知道什么是正确的用途。 我希望有人能解释我理解。

(我仍然想要我在标题中提出的问题的解决方案,但我真的需要理解=)

好吧,我找到了办法。 我不知道UserManager返回的User对象具有Roles属性以及用户拥有的角色集合。

 using Microsoft.AspNet.Identity; var manager = new UserManager(new UserStore()); var roles = new List { "admin", "contributor" }; var currentUser = manager.FindById(User.Identity.GetUserId()); if (currentUser.Roles.Any(u => roles.Contains(u.Role.Name))) { } 

有关Asp.net身份会员资格的更多信息..这似乎是一个很好的资源。

http://www.nuget.org/packages/Microsoft.AspNet.Identity.Samples/

嗯,我想这一切都取决于你的要求是什么,如果你可以使用简单的会员资格。 如果您正确地集成了成员身份(表单身份validation),那么您应该使用User.IsInRole(“Role”)。

看起来你发布的是你正在使用自己的自定义用户对象,所以在这种情况下我会使用自定义成员资格提供程序,网上有很多这样的例子,第一个我发现http:// www。 codeproject.com/Articles/165159/Custom-Membership-Providers

我们的想法是覆盖所有Membership方法,并从服务层返回您自己的用户数据。

希望有所帮助。 背风处