ASP.net 2.0 が登場してから、私は常に、よくパッケージ化された Web サイト権限管理ツールである Membership 2.0 を使用したいと考えていました。 SQLProvider を使用し、aspnet_regsql を使用して必要なテーブルを生成し、web.config を構成しましたが、ログイン後に Membership.GetUser() を介して現在ログインしているユーザーを取得するなど、実際の使用では多くの問題が発生しました。結果コードが返されました。私にとっては null でした... webconfig に含まれている認証と認可の設定はまったく効果がないようで、いくつか検索した後でもこの問題を解決できなかったので、メンバーシップを使用するしかありませんでした。認証および認可プロセス全体を単独で実行します。
ログイン制御が機能しなかったため、自分で login.aspx ページを作成しました。このページでは、Membership.ValidateUser() 関数を使用してユーザーのログインを判断し、ユーザーのユーザー名がセッションに保存されます。
XML シリアル化された構成可能オブジェクトを実装しました。このオブジェクトの構造は
<?xml version="1.0"?>
です。
<SecurityConfig xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd=" http://www.w3.org/2001/XMLSchema ">
<ページの場所>
<PageLocation Location="~/admin/admin/RoleManager.aspx">
<許可の役割 = "管理者" />
</ページの場所>
</ページの場所>
</SecurityConfig>
PageLocations は、PageLocation の List オブジェクトのコレクションです。Pagelocation 内の場所には、アクセス許可を追加するページが含まれます。 Pagelocation には、Allow オブジェクトが含まれており、そのうちの 1 つは、ページで承認できるユーザー ロールを含むロールです。これにより、すべてのページがこの XML 構造に追加されます。
次に、次の関数を実装します。
/// <summary>
/// このページへのアクセスを許可するかどうか
/// </概要>
/// <param name="url">承認されたパス</param>
/// <param name="rolenames">認可ロール</param>
/// <returns>許可されているかどうか</returns>
public bool isAllow(Uri url,string[] ロール名,HttpContext コンテキスト)
{
文字列パス=context.Server.MapPath(url.AbsolutePath);
PageLocation theLocation = null;
foreach (pageLocations 内の PageLocation の場所)
{
文字列の strlocation;
strlocation=context.Server.MapPath(location.Location);
if (strlocation.ToLower() == path.ToLower())
{
theLocation = 場所;
}
}
if (場所 != null)
{
string[]ロール = theLocation.Allow.Roles.Split(',');
foreach (ロール内の文字列ロール)
{
foreach (ロール名の文字列ロール名)
{
if (ロール名 == ロール)
{
true を返します。
}
}
}
false を返します。
}
それ以外
{
false を返します。
比較
し、XML に記述されている Pagelocation オブジェクトを取得して、その許可ロールが現在のユーザーの
ロールのセキュリティ承認と一致するかどうかを判断します。
私の管理はバックグラウンドのセキュリティ管理に使用されるため、SecurityConfig クラスをカプセル化し、Context.Session[] を通じてログインしているユーザー アカウントを取得し、Roles.GetRolesForUser(username) を通じてログインを取得するユーザー コントロールを作成しました。を実行し、Context.Request.Url とロールを関数に渡します。ユーザーが許可されている場合は、現在のページが表示されます。そうでない場合は、そのユーザーのログイン ページにジャンプするか、そのような許可がないことを示すメッセージが表示されます。 。
私は MasterPage を使用しているので、この場合はこのコントロールをマスターページにバインドするだけで各ページが管理されるようになり、SecurityConfig オブジェクトを編集してシリアル化するページをバックグラウンドで書き込むことで、すべてのページのアクセス許可を制御できます。
Membership が機能していない場合にも、この方法を採用することは良い考えです。この方法では、CreateUser や CreateRoles などの Membership がユーザーに提供する基本的な機能を活用するだけでなく、権限設定の必要性も満たします。今すぐ対処する唯一の方法。
ホームページに投稿するのは初めてなのですが、どのような状況で.net 認証が機能しないのか誰か教えていただければ幸いです。
http://www.cnblogs.com/livesite/archive/2006/08/14/membership.html