私はasp.netアプリケーションで作業しています。私は4つの役割を持つaspnetrolesテーブルがあります。aspnet IDを使用してログイン中にユーザーの役割を確認する
:ログインながら
var user = new ApplicationUser { UserName = model.Email, Email = model.Email};
var result = await UserManager.CreateAsync(user, model.Password);
**UserManager.AddToRole(user.Id, model.UserRole);**
は今、私はこのようなログインアクションの結果で確認しています:AccountController登録Actionメソッドで
**Id Name**
1 Admin
4 Consumer
2 Provider
3 SaleUser
を、私はこれを追加しましたaspnetusersとaspnetuserolesテーブルに正しいデータがあることがわかります。
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
if (User.IsInRole(model.UserRole))
return RedirectToLocal(returnUrl);
ただし、条件は満たされません。ユーザーが特定の役割に属しているかどうかを確認する方法
IはStartup.cs ConfigureAuth方法で次の行を追加しました:
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
とidentityConfigクラスでこのクラス:
public class ApplicationRoleManager : RoleManager<IdentityRole>
{
public ApplicationRoleManager(IRoleStore<IdentityRole, string> store) : base(store)
{
}
public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
{
var roleStore = new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>());
return new ApplicationRoleManager(roleStore);
}
}
とaccountcontrollerでこのコード:
private ApplicationRoleManager roleManager;
public ApplicationRoleManager RoleManager
{
get
{
return this.roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>();
}
private set { this.roleManager = value; }
}
でも同じ問題
更新
VARユーザー=新しいClaimsPrincipal(AuthenticationManager.AuthenticationResponseGrant.Identity)。
if (User.IsInRole(model.UserRole))
return RedirectToLocal(returnUrl);
else
{
AuthenticationManager.AuthenticationResponseGrant = null;
model.Roles = GetRoles();
ModelState.AddModelError("", "You cannot login as " + model.UserRole);
return View(model);
}
更新されたコードセクションに 'if(User.IsInRole(model.UserRole))'が入力されますか? –