我最近在我的ASP.NET项目中添加了Identity,但是我无法检查用户角色。
我最初在Startup.cs中创建了Admin角色:
private void createRolesandUsers()
{
ApplicationDbContext context = new ApplicationDbContext();
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
if (!roleManager.RoleExists("Admin"))
{
var role = new Microsoft.AspNet.Identity.EntityFramework.IdentityRole();
role.Name = "Admin";
roleManager.Create(role);
var user = new ApplicationUser();
user.UserName = "admin";
user.Email = "admin@tpms.com";
string userPWD = "********";
var chkUser = UserManager.Create(user, userPWD);
if (chkUser.Succeeded)
{
var result1 = UserManager.AddToRole(user.Id, "Admin");
}
}
}
在我的UserController.cs中,我有一个检查用户是否是管理员的功能:
public Boolean isAdminUser()
{
if (User.Identity.IsAuthenticated)
{
var user = User.Identity;
ApplicationDbContext context = new ApplicationDbContext();
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
var s = UserManager.GetRoles(user.GetUserId());
if (s[0].ToString() == "Admin")
{
return true;
}
else
{
return false;
}
}
return false;
}
但是,我似乎找不到从我的视图和控制器访问isAdminUser()函数的方法。
我对IsUserInRole()函数进行了一些研究,但当我尝试时:
@if (Roles.IsUserInRole(User.Identity.Name, "Admin")) { Html.ActionLink("Edit", "Edit", new { id=item.GuestID }); }
if语句总是返回false。
答案 0 :(得分:2)
尝试将HttpContext.Current.User.IsInRole("Admin");
用作与System.Web.Security命名空间下的旧成员资格提供程序相关的Roles.IsUserInRole
,并在roleManager
中需要web.config
提供程序配置。
@if(HttpContext.Current.User.IsInRole("Admin"))
{
Html.ActionLink("Edit", "Edit", new { id = item.GuestID });
}
另一种方法是使用UserManager
userManager.IsInRole("userId","Admin")