ASP.NET MVC 5アプリケーションがあります。ユーザーとロールの管理に標準のASP.NET Identityプロバイダーを使用しています。独自のリポジトリプロジェクトからIdentityUserを使用していることが重要ですが、これは問題ないようです。ユーザーの登録、ログイン、編集、役割の管理を行うことができます。
次の行でロールにユーザーを追加します。
UserManager.AddToRole(userdetail.Id, r);
db.Entry(userdetail).State = EntityState.Modified;
db.SaveChanges();
これはDBレベルで機能しているようです。
しかし、私はロールベースの認証を使用することはできません、実際には単純な
HttpContext.User.IsInRole("Administrator")
あまりにも機能していません。
[Authorize(Roles="Administrator")]
あまりにも機能していません。
ユーザーが管理者かどうかは、この方法でのみ確認できます。
UserManager.IsInRole(userID, "Administrator").
どうして?
私が見つけたすべてのチュートリアルで、すべてがうまくいきます。別のプロジェクトリポジトリが原因である可能性がありますか?または、ASP.NETのIDがあまりにも壊れているのですか
アドバイスを下さい、
問題があるようです。[設計上の問題]
また、正しいロール名が確認に使用されていることを確認してください。
[上記は、以下のコードで実行されたテストに基づいています。 Role Name = "Admin"、ユーザーはRole "Admin"に追加されます。]
_[Authorize(Roles="Admin")] /*True as "Admin" has A capital as entered in Role name*/
public ActionResult Secured()
{
if (User.IsInRole("admin")) /*This is False*/
{
Console.WriteLine("In");
}
if(UserManager.IsInRole(User.Identity.GetUserId(), "admin")) /*This is True!!*/
{
Console.WriteLine("In");
}
return View();
}
_
属性を[Authorize(Roles="admin")]
に変更すると、ログインページにリダイレクトされます。
その場合、ユーザーをログアウトして再度ログインする必要があります。
ロールのデータもCookieに格納されるため、Cookieを再発行して機能させる必要があります。
Web.configにこのエントリがありますか?
<roleManager enabled="true">
<providers>
<clear />
<add connectionStringName="ApplicationServices" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" applicationName="/" />
</providers>
</roleManager>
また、私が正しく覚えている場合、.NETの異なるバージョンでは、ロールプロバイダーアセンブリに異なる名前空間があります。