3

「サブサイト」をサポートする必要がある ASP.NET アプリケーションを設計しています。

アイデアは、スーパー管理者がすべてのユーザー、グローバル アプリケーション設定、およびサブサイトを管理することです。各サブサイトには独自の設定 (ローカル管理者、ロゴ、ウェルカム メッセージなど) がいくつかあり、各サブサイトには独自の登録ユーザー リストがあります。

これは、Joomla、SharePoint、DotNetNuke などの CMS を使用して得られるものと非常によく似ています。実際、私はそのようなプラットフォームを使用したくなりますが、他のプロジェクトの要件により、それを行うことができません。

この時点での私の質問は非常に一般的です。

  1. ASP.NET 2.0 Membershipを使用して、スーパー管理者を指定し、登録したサブサイトに基づいてユーザーを分類するにはどうすればよいですか?
  2. サブサイトをどのように実装しますか (どのパターンを使用する必要があるかなど) ? 他の人がこれをどのように行ったかを説明する記事に特に興味があります。DotNetNuke のような大規模なオープン ソース プロジェクトのソース コードを何日もかけて掘り下げるのではなく、他の人が習得したベスト プラクティスを学びたいと考えています。

私はこれを ASP.NET MVC 1.0 で実装しているので、同様の例が最も役に立ちます。


更新: Mike Hadlow がマルチテナンシーを実装した 方法が気に入ったので、彼の作品を出発点として使用することにしました。各テナントが独自の分離されたデータベースを使用している方法については、この投稿を参照してください。これにより、「サブサイトに基づく」メンバーシップの問題が解決されます。SqlMembershipProvider

4

2 に答える 2

4

あなたが試みていることは、「サブサイト」ではなく「マルチテナンシー」と呼ばれることが一般的です

これと同様の質問がありましたが、受け入れられた回答はもっともらしく聞こえます。

于 2009-05-21T01:39:59.367 に答える
2

「サブサイト」の意味がわからない場合はご容赦ください。グランドマスターサイト内にミニサイトを作成するというアイデアを指すためにその用語を使用していますか?もしそうなら、私はあなたが何をしたいのか理解していると思いますが、asp.net 2.0のメンバーシップシステムは、あなたが望むものを作成するために内部で操作する必要があるフレームワークであると言わざるを得ません。

とにかく、はそれをどのように行うか(そしてこれは.netメンバーシップがすぐに使用されていることに基づいています):

ASP.NETでは、ユーザーに「ロール」をアタッチし、それらのユーザーに「プロファイル」属性をアタッチすることもできます。プロファイルは、「電話番号」やその他のメタデータなどをユーザーに添付するために使用されますが、ホームの「サブサイト」をユーザーに添付するためにも使用できます。

'globaladmin'というロールを作成し、ユーザーとして自分自身を作成し​​てから、あなた(そしてあなただけ)をそのロールに割り当てます。次に、「siteadmin」ロールを作成し、各サブサイトのadminユーザーをそのロールに割り当てますが、管理対象のサイトに対応する値を持つ「site」プロファイルエントリを割り当てるように十分注意してください。

たとえば、「user123」は「siteadmin」ロールに割り当てられ、「site」プロファイル属性は「subsitexyz」になります。その後、そのサイトの管理者として識別されます。

上記は実行可能ですが、これを可能な限り巧妙にしたい場合は、独自のMembershipProvider(SubsiteMembershipProvider)を作成し、新しいプロバイダーが返すMembershipUserから継承する新しいSubsiteMembershipUserクラスを作成します。次に、独自のプロパティをSubsiteMembershipUserに追加して、アプリがクエリを実行して、ユーザーが属しているサイトを見つけることができます。

//get current logged on user - cast it to our custom membership user object
SubsiteMembershipUser thisUser = (SubsiteMembershipUser)GetUser(); 
if(thisUser.SubsiteName == SiteUserIsBrowsingString
&& Roles.IsUserInRole(thisUser.UserName, "siteadmin"))
  //user is admin for this site so do something
于 2009-05-20T22:33:07.577 に答える