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.getrolesforuser.aspx

于 2012-05-31T19:52:48.020 に答える