私はこのコードを持っていますが、これが正しく機能しない理由がわかりません。カスタム ロール プロバイダーを作成しました。
@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();
}