繁体   English   中英

如何检查用户在asp.net身份中是否担任过多个角色

[英]How to check user is in many roles in asp.net identity

嗨,我需要检查用户是否在其中一个角色中,并且我对发现的不同版本的代码感到困惑。 我先告诉你我现在有什么

_manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>());

var currentUser = _manager.FindById(User.Identity.GetUserId());      

if (!_manager.IsInRole(currentUser.Id, "admin"))
{

}

和ApplicationUser

public class ApplicationUser : IdentityUser
{        
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{

}

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

我发现这个例子似乎不错,但我必须在web.config中进行以下更改以使其起作用。 我不需要像现在这样用我的代码来做。

roleManager enabled="true"

我尝试在UserManager.IsInRole上进行更多研究,但我找不到很多关于它的信息。 多一点阅读,我了解我发现的关于简单会员资格的帖子。

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

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

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

using Microsoft.AspNet.Identity;
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>());

var roles = new List<string> { "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/

好吧,我想这全都取决于您的要求,即如果可以的话,请使用简单的成员资格。 如果您正确集成了成员身份(表单身份验证),则应真正使用User.IsInRole(“ Role”)。

从您发布的内容来看,您似乎正在使用自己的自定义用户对象,因此在这种情况下,我将使用自定义成员资格提供程序,网上有很多此类示例,在这里我找到的第一个1 http:// www。 codeproject.com/Articles/165159/Custom-Membership-Providers

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

希望能有所帮助。 背风处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM