FormsAuthenticationTicket
コンストラクタ(ほとんどのパラメータを持つもの)は文字列を取りuserData
パラメータがあります。パイプ(|)やハッシュのような文字で区切られた役割を追加することができます。どのように使用する予定ですかはあなた次第です。通常は、AuthenticateRequest
イベントを登録することです。だから、あなたがチケットを作成することができ、これはだった:今、あなたはIPrincipalオブジェクト(HttpContext.Current.User
)で役割を持っているとあなたが照会すると
public override void Init()
{
base.AuthenticateRequest += OnAuthenticateRequest;
}
private void OnAuthenticateRequest(object sender, EventArgs eventArgs)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
var decodedTicket = FormsAuthentication.Decrypt(cookie.Value);
var roles = decodedTicket.UserData.Split(new[] {"|"}, StringSplitOptions.RemoveEmptyEntries);
var principal = new GenericPrincipal(HttpContext.Current.User.Identity, roles);
HttpContext.Current.User = principal;
}
}
:その後
private void CreateTicket()
{
var ticket = new FormsAuthenticationTicket(
version: 1,
name: UserName,
issueDate: DateTime.Now,
expiration: DateTime.Now.AddSeconds(httpContext.Session.Timeout),
isPersistent: false,
userData: String.Join("|", arrayOfRoles));
var encryptedTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
httpContext.Response.Cookies.Add(cookie);
}
global.asax
にあなたはこのような何かをするだろうHttpContext.Current.User.IsUserInRole("RoleName")
あなたは真または偽を得るでしょう。そうすれば、プロバイダーRoles
の使用を避けることができます。
更新:BeginRequest
ではなく、Application_AuthenticateRequest
というユーザープリンシパルの再作成を処理するためのより良いイベントが呼び出されます。これを反映するようにコードを更新しました。
あなたは現在、ロールの操作にどのメカニズムを使用していますか? –
@HuseinRoncevic私のデータベーステーブルでは、私はUser.UのUserName、Password、Roleを持っています。データベースから取得したRoleを認証チケットに渡したいと思います。 – chamara
このように動作しているかわかりません。あなたは認証クッキーにユーザー名を入れて、次に入力要求ごとに認証クッキーからユーザー名を読み取り、データベースから他の詳細を読み込みます。これは 'ActionFilter'で行うことができます。 – Suhas