RoleManager を使用するのはこれが初めてで、ロールにユーザー名を追加する際に問題が発生しています。目標は、(現在ログインしている) ユーザーが管理者であるかどうか ( isAdmin = 1
SQL データベース内) を確認することです。私が LoginController で使用しているのは次のとおりです。
var usr = db.Users.Where(u => u.UserName.ToLower() == userLogin.UserName.ToLower() &&
u.Password.Equals(userLogin.Password, StringComparison.Ordinal)).FirstOrDefault();
if (usr != null)
{
FormsAuthentication.SetAuthCookie(usr.UserName, false);
if (usr.IsAdmin == true)
{
if(!Roles.RoleExists("Admin"))
Roles.CreateRole("Admin");
var x = Roles.GetAllRoles();
if(!Roles.IsUserInRole(usr.UserName, "Admin"))
Roles.AddUserToRole(usr.UserName, "Admin");
}
return RedirectToAction("Index", "Home");
}
これらの各行にブレークポイントを設定しましたがRoles.CreateRole("Admin");
、到達することはありません。これは、「管理者」という役割があることを意味します。ただし、var x = Roles.GetAllRoles();
常に null が表示されます。
if(!Roles.IsUserInRole(usr.UserName, "Admin"))
常に到達するため、ユーザーは現在そのロールに割り当てられていませんが、次の行に ProviderException が表示され、次の追加情報が表示されます:「ユーザー "_username" が見つかりませんでした。
誰かがそれを必要とする場合の私の Web Config:
<roleManager enabled="true" defaultProvider="MyRoleProvider">
<providers>
<clear />
<add name="MyRoleProvider" type="System.Web.Providers.DefaultRoleProvider"
connectionStringName="StoreFrontConnectionString" applicationName="/"/>
</providers>
</roleManager>
どんな助けでも大歓迎です。