0

ユーザーのアクセス制御を管理し、Web サイト内で役割ごとに異なるページを許可したいと考えています。各ユーザーには、異なる行がある場合もあります。

このアクセス制御を処理する最善の方法を知りたいです。ただし、これらの制限があります。ロールは、私が使用している Oracle データベースで作成されます。ロールを管理するために APP_DATA の ASPNETDB を使用するつもりはありません。

私の最初のアイデアは、ユーザーのアクセスを確認し、セッションを作成して、彼が管理者、ユーザー、またはその両方であるかどうかを示すことでした。ただし、それに応じてメニュー項目を非表示/表示する方法を理解する必要がありました。asp.NET 4.0 には、この使用のために構築された何かがあると信じているため、私はこのアイデアを進めませんでした。

更新: Web フォームを使用しています

更新 #2: ログイン フォームを使用していません。ログインした人のWindowsユーザー名を取得し、データベース内のそのユーザー名のアクセスと比較しています。認証メカニズムは手動です。役割を区別する方法と、さまざまなメニューを表示する方法を見つけるだけです。

4

5 に答える 5

0

セッションと認証が同期していないため、この種の情報を保存するためにセッションを使用しないでください。ビルドインAsp.Netメンバーシッププロバイダーを使用するか、カスタムコードを記述して認証Cookieを作成できます。これは、認証Cookieの例です。UserModelには追加情報(役割、ユーザー名)が含まれており、認証チケットと一緒に安全な暗号化された形式で保存されます。

private void CreateAuthentificationTicet(UserModel user)
{
    var serializedUser = JsonConvert.SerializeObject(user);
    var ticket = new FormsAuthenticationTicket(1,               // version 
                                            user.Email,  // user name
                                            DateTime.Now,    // create time
                                            DateTime.Now.AddMinutes(30), // expire time
                                            false,           // persistent
                                            serializedUser);             // user data

    var strEncryptedTicket = FormsAuthentication.Encrypt(ticket);
    var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, strEncryptedTicket);
    Response.Cookies.Add(cookie);
}
于 2012-07-02T11:45:55.330 に答える
0

独自のカスタムメンバーシップおよびロールプロバイダーを実装できます。実際、それほど難しくはありません。

Googleを使用して「カスタムメンバーシッププロバイダーの実装」を検索すると、その方法を説明する多くの記事が見つかります。私がかなり良いと思ったもの:

ASP.NET MVC 2のカスタムメンバーシッププロバイダーを作成するにはどうすればよいですか?

プロバイダーを実装してweb.configに登録した後、アクセス制御に通常の方法を使用できます(Web configでの承認、csコードでのIsInroleなど)。

于 2012-07-02T10:33:09.557 に答える
0

Asp.netでForms認証がどのように機能するかを見てください。これは、使用しているテクノロジ(webformsまたはmvc)や、ユーザーに使用しているデータソース(sql、xmlなど)からは独立しています。たとえば、ユーザーがデータソースに対して認証されたら(たとえば、ユーザー名とパスワードがユーザーテーブルに存在する)、IPrincipal Userオブジェクトに必要なロールを割り当て、認証済みとしてフラグを立てます。これらの値はCookieに保存され、認証メカニズムがアプリのデータソースからどのように独立しているかを示します。詳細情報: http ://www.eggheadcafe.com/tutorials/asp-net/009e2e5e-5a44-4050-8233-59a0d69844e8/basics-forms-authentication-in-aspnet-20.aspx

http://msdn.microsoft.com/en-us/library/aa480476.aspx

CASShibboleth用の.NETのMembershipProvider

于 2012-07-02T10:55:11.617 に答える
0

IPrincipal と IIdentity をオーバーライドして試すことができます。

And use these method 

IsInRole("TestRole")
于 2012-07-02T10:06:21.593 に答える
0

メンバーシップと役割にOracle Providerを使用することを考えましたか

http://docs.oracle.com/html/E10928_01/IntroInstallation.htm http://www.oracle.com/technetwork/topics/dotnet/index-087367.htmlをチェックして ください

于 2012-07-02T10:41:36.403 に答える