2009-05-20 12 views
3

私は 'SubSites'をサポートしなければならないASP.Netアプリケーションを設計しています。サブサイトをサポートするAsp.Netアプリケーションの設計

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

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

私の質問は、この時点で非常に一般的です:ASP.NET 2.0 Membershipを使用して

  1. はどのように私はスーパー管理者を指定し、それらが登録されているにサブサイトに基づいてユーザを分類するのでしょうか?
  2. サブサイトを実装するにはどうすればよいですか(どのようなパターンを使用するなど)?私は他人がこれをやった方法を説明する記事に特に興味があります。 DotNetNukeのような大規模なオープンソースプロジェクトのソースコードを掘り下げずに、他の人が得たベストプラクティスを学びたいと思います。

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


更新日: 私は実際にどのように Mike Hadlow implemented multi-tenancyが好きで、私は彼の作品を出発点として使うことに決めました。私がSqlMembershipProviderをどのテナントがそれぞれ持っているのかについては、 isolated databaseを参照してください。 this postを参照してください。それが私のメンバーシップ「サブサイトに基づいて」の問題を解決します。

答えて

4

より一般的に「multitenancy」ではなく、「サブサイト」と呼ばれ、あなたがしようとしています

これにはsimilar questionがあり、受け入れられた回答が考えられます。

+0

恐ろしい!これは私にhttp://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/を思い出させます。 Abelson(またはそれはSussmanでしたか?)は、事の真の名前を知ることの重要性について話しました。 –

+0

"ASP.Net Multitenancy"の最初の検索では、数多くの情報とサンプルが提供されました。再度、感謝します。 –

2

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

とにかく、どのように私はがそれを行うだろう(そしてこれはアウトオブボックス使用されている.NETメンバーシップに基づいています):ASP.NETは、ユーザーへの役割」を付けると '可能に

それらのユーザーにも「プロファイル」属性を提供します。プロフィールは「電話番号」などのメタデータをユーザーに添付するために使用されますが、それを使用して自宅の「サブサイト」を添付することもできます。

私は 'globaladmin'という名前のロールを作成し、自分自身をユーザーとして作成し、そのロールにあなた(そしてあなただけ)を割り当てます。次に、「siteadmin」ロールを作成し、各サブサイトの管理者ユーザーにその役割を割り当てますが、管理者であるサイトに対応する値を持つ「サイト」プロファイルエントリを割り当てることに非常に注意しています。

たとえば、 '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 
+0

ありがとうNeil、 'SubSite'のあなたの解釈は、私がコミュニケーションしようとしていたものです。多くのページでさまざまな意味で用語を使用しているため、Googleにとっては難しい概念です。とにかくあなたの投稿は役に立ちました。他の人がそれを拡大したり、適用される記事を指摘してくれることを願っています。再度、感謝します! –

+0

np、それは何かを行う珍しい方法を考えるのは楽しいですが、私は百万年の間にマルチテナントアプリを探したことはありませんでした! –