現在、ログイン時にユーザーの行を AccessSession テーブルに挿入しています。このテーブルには、ユーザーが持っているロールの詳細と ASP.NET_SessionId Cookie が保持されています。
これの GetRolesForUser メソッドのカスタム実装は次のとおりです。
public override string[] GetRolesForUser(string username)
{
List<string> roles = new List<string>();
string[] rolesArray;
char[] splitter = { '|' };
string sessionId = HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value;
AccessSession sessionObject = AccessSession.Get(sessionId);
if (sessionObject != null)
{
rolesArray = sessionObject.Roles.Split(splitter);
foreach (string role in rolesArray)
{
if (!String.IsNullOrEmpty(role))
{
roles.Add(role);
}
}
}
return roles.ToArray();
}
私が持っている質問は、このアプローチの使用が間違っているということですか? Cookie が無効になっている場合、HttpContext.Current.Request.Cookies["ASP.NET_SessionId"] はありません。私の別の計画は、AccessSession オブジェクトを Session に挿入することでしたが、カスタム RoleProvider がアクセスしようとすると、これは常に null と表示されます。
cacheRolesInCookie=true を使用することもできますが、Cookie を無効にすると機能が損なわれるため、上記のアプローチよりも優れているとは言えません。
ありがとう、リチャード