.NET 2.0では、設定ロールを処理するthe built-in role management featureを使用できます。
.NET 1.1の場合、または組み込みの役割管理を使用できない、または使用したくない理由がある場合は、PostAuthenticateRequestイベントを使用するとよいでしょう。
セッションは、(a)セッションの有効期間がフォームauthenticatio cookieの有効期間とは完全に独立しており、(b)セッションが有効にされていない可能性があるため、ロールの保存には使用されません。
各リクエストでロールを設定する必要がありますが、これは問題ではありません。そのたびにデータベース(*)からそれらを取得する必要はありません。それらをどこかにキャッシュすることができます。セッションでそれらをキャッシュするのは合理的な解決策ですが、そこに見つからない場合はデータベースから再度読み込むコードを組み込む必要があります。
(*)またはそれらを保存した場所。セッションでの役割をキャッシュするたとえば
EDIT
、あなたのような何かを行うことができます:別の方法としては、ASP.NETキャッシュ内の役割を格納することで、セッションへの依存を避けることができ
string[] GetRoles(string userName)
{
string[] roles = Session["Roles"] as string[];
if (roles == null)
{
roles = GetRolesFromDatabase(userName);
Session["Roles"] = roles;
}
return roles;
}
をおそらく、有効期限が切れている。キャッシュはすべてのリクエスト間で共有されるため、キャッシュキーの一部としてユーザー名を使用する必要があります。
string[] GetRoles(string userName)
{
string cacheKey = "Roles:" + userName;
string[] roles = Cache[cacheKey] as string[];
if (roles == null)
{
roles = GetRolesFromDatabase(userName);
Cache.Insert(cacheKey, roles, ...);
}
return roles;
}
出典
2009-07-19 08:42:01
Joe
すてきなソリューションをありがとうございます。あなたの返事の最後の段落。 "セッション中の役割を捕まえることは合理的な解決策です" 例のリンクがあれば、もっと理解できるようにしてください –
@HemantKothiyal:地獄、なぜあなたはこの答えをアップアップして受け入れなかったのですか?非常に便利で、Joeはあなたのコメントの後にさらに情報を提供しました。なぜあなたが彼の努力に感謝していないのか分かりません。 – Slauma