我有这段代码,但我不知道为什么这不正常。我创建了一个自定义角色提供程序。
@if (Roles.IsUserInRole(User.Identity.Name, "Manager"))
{
<li>@Html.ActionLink("User Management", "Index", "User")</li>
}
这是自定义代码,其余部分未经修改。
public override bool IsUserInRole(string username, string roleName)
{
UserRoleType usrt = (from usr in db.Users
join usrRole in db.UserRoles on usr.UserID equals usrRole.UserID
where usr.Email == username
select usrRole.UserRoleType).FirstOrDefault();
if (roleName.Split(',').Contains(usrt.UserRoleTypeName))
return true;
return false;
}
当我这样做时,这确实有效:
UserRoleProvider roleProvider = System.Web.Security.Roles.Provider as UserRoleProvider;
if (roleProvider.IsUserInRole(httpContext.User.Identity.Name, Roles) || String.IsNullOrEmpty(Roles))
return true;
编辑:
public override string[] GetRolesForUser(string roleName)
{
return db.UserRoleTypes.Select(u => u.UserRoleTypeName).ToArray();
}
答案 0 :(得分:0)
结果证明GetRolesForUser写得正确并且它正在拉动所有用户,因此它基于所有用户进行身份验证,这意味着它首先出现。
重新阅读文档以获得我的答案。
http://msdn.microsoft.com/en-us/library/system.web.security.roleprovider.getrolesforuser.aspx
答案 1 :(得分:0)
似乎
User.IsInRole(rolename)使用
MembershipProvider.GetRolesForUser(username)我花了一段时间来弄清楚这一点。