MVC4 アプリケーション用のカスタム ロール プロバイダーがあり、ロールを作成し、ロールの存在をチェックし、IsUserInRole をチェックするという点で非常にうまく機能していますが、私の [Authorize(Roles = "Admin")] はまだデフォルトの System.Web.Security を使用しています。 RolePrincipal.IsInRole(String role) メソッド
IsInRole メソッドをオーバーライドするカスタム RolePrincipal を作成しようとしましたが、コンストラクターの正しいパラメーターを見つけるのに問題があり、web.config でこれを設定する方法がわかりません。コードは次のとおりです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration.Provider;
using MetaLearning.Data;
using System.Web.Security;
namespace Project.Principal
{
public class MyPrincipal : System.Web.Security.RolePrincipal
{
private MyContext dbcontext = new MyContext(System.Configuration.ConfigurationManager.ConnectionStrings["MyContext"].ConnectionString);
private Repository<MyUser> userRepository;
private Repository<Role> roleRepository;
public MyPrincipal()
{
this.userRepository = new Repository<MyUser>(dbcontext);
this.roleRepository = new Repository<Role>(dbcontext);
}
public override bool IsInRole(string role)
{
Role roleCheck = roleRepository.Get(r => r.Name == role).FirstOrDefault();
MyUser user = userRepository.Get(u => u.Username == HttpContext.Current.User.Identity.Name).FirstOrDefault();
user.RoleID = roleCheck.RoleID;
userRepository.Update(user);
userRepository.SaveChanges();
return true;
}
}
}
RolePrincipal のドキュメントhttp://msdn.microsoft.com/en-us/library/system.web.security.roleprincipal.aspxを確認したところ、最も基本的なコンストラクター RolePrincipal(IIdentity) が IIdentity のパラメーターを受け取ることがわかりました。それが何であるかわからないので、これをどこからどのように取得できますか? webconfig に必要な追加の変更はありますか?