您好我需要检查用户是否处于其中一个角色中,并且我对我找到的不同版本的代码感到困惑。让我先告诉你我现在的情况
_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等。
我发现this example似乎很好,但我必须在web.config中进行以下更改才能使其正常工作。我目前没有使用我的代码那样做。
roleManager enabled="true"
我尝试在UserManager.IsInRole
上进行更多研究,但我找不到相关内容。更多阅读我理解我发现的帖子是关于简单会员。</ p>
当我使用Identity时,我不应该使用我找到的代码(指链接和接受的答案),因为这将混合身份和简单成员身份?特别是我引用这一行Roles.GetRolesForUser
。身份有类似的方法吗?我认为我对不同的会员框架感到困惑,并且不知道什么是正确的用途。我希望有人能解释我理解。
(我仍然想要我在标题中提出的问题的解决方案,但我真的需要理解=)
答案 0 :(得分:4)
我找到了办法。我不知道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/
答案 1 :(得分:0)
嗯,我想这一切都取决于你的要求是什么,如果可以的话,使用简单的会员资格。 如果您正确地集成了成员资格(表单身份验证),那么您应该使用User.IsInRole(“Role”)。
看起来你发布的内容是你正在使用自己的自定义用户对象,所以在这种情况下,我会使用自定义成员资格提供程序,网上有很多这样的例子,我发现的第一个1 http://www.codeproject.com/Articles/165159/Custom-Membership-Providers
我们的想法是覆盖所有的Membership方法,并从服务层返回您自己的用户数据。
希望有所帮助。 李