0

我有这段代码,但我不知道为什么它不能正常工作。我创建了一个自定义角色提供程序。

@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();

    }
4

2 回答 2

0

事实证明 GetRolesForUser 是正确编写的,它正在拉取所有用户,因此它基于所有用户进行身份验证,这意味着它首先是。

重新阅读文档以在此处获得我的答案。

http://msdn.microsoft.com/en-us/library/system.web.security.roleprovider.gettrolesforuser.aspx

于 2012-05-31T19:52:48.020 回答
0

看起来

User.IsInRole(角色名)
用途
MembershipProvider.GetRolesForUser(用户名)
我花了一段时间才弄明白。

于 2013-05-16T13:44:23.320 回答