2009-08-31 69 views
0

我正在写一个非常简单的ASP.NET MVC的Web应用程序:一对夫妇只CRUD页面,某些文件夹,在这里客户可以浏览文件,只有3或4个角色。该网站将用于B2B场景中,每个客户都有自己的“网站”。通过单一代码库支持多个网站的方法有哪些?

在这一点上,只有将改变网站,从客户端到客户端的东西是内容(即文件和他们将看到的数据行)。如果是这种情况,那么在所有客户中管理角色的最佳方式是什么?我正在寻找最简单的解决方案,因为这是一个概念证明,我现在不想投入大量时间。

如果它不只是改变了内容?也许有些客户需要一些自定义静态页面。在这一点上,我唯一的选择是复制整个网站吗?我对此持怀疑态度,因为如果我得到很多客户,它将很难维持。

我会很感激任何帮助......我只是不想拍自己的脚;我确信有人以前做过这个。

回答

0

我不知道这完全回答你的问题,但只要保持自定义“静态”的页面,我发现自己实现一个客户端的MVC网站上的系统,客户端可以创建自己的管理控制面板“的页面”每个页面都有一个由“标题”和HTML内容字段(使用WYISWYG编辑器填充)组成的“PageContent”实体集合。在创建页面后,MVC应用程序将http://yoursite.com/Page/Page-Url-Specified-By-The-User映射到该页面并在其中呈现其内容。很明显,这些页面是动态的,但是就客户端而言,他们已经创建了一个全新的自定义页面,只需很少的努力即可。

+0

好主意。然而,我现在最关心的是角色管理。 – 2009-08-31 16:12:22

1

我在IIS中创建虚拟目录为每一个客户,都指向回在我的ASP.NET代码所在的同一文件夹中。

这让我支持几十个几乎相同的“网站”,每个都有自己的数据库,该数据库在形式上基本相同,只是在不同的数据。

所以,我的网站的网址是这样的:

http://mysite.com/clientacme/ 
http://mysite.com/clientbill/ 
http://mysite.com/clientcharlie/ 

有两个关键执行细节我制定了这一点:

  1. 我用的是虚拟目录的文件夹名称确定DSN我代码读取。这是通过创建一个简单的静态方法来实现的,该方法将文件夹名称注入到DSN字符串模板中。如果您想要使用相同的数据库来存储每个人的数据,则可以将该文件夹名称用作查询中的默认过滤器。

  2. 我在每个数据库(key,value)的简单“设置”表中存储每个网站(页眉和页脚,选项,链接到自定义报告等)的设置,而不是在web.config中(这是共享的)。这使我可以随着时间的推移扩展代码库,以便为每个客户端定制体验,而不需要分叉代码。

对于用户身份验证,我使用基本身份验证,并将用户名,密码和角色保存在每个数据库的表中。

重要的是,如果你使用不同的SQL Server数据库为每个客户端的内容,你需要脚本到数据库中的表,索引等任何更改,并在同一时间在所有数据库应用它们(后当然测试)。这样做的一个简单方法是维护一个包含数据库名称表和顶部大“SQL”单元格的Excel工作表。在每个数据库名称旁边,创建一个公式为“USE databasename;”然后连接顶部的SQL代码。

+0

虽然我喜欢这个想法,但我认为不得不维护多个数据库实际上比维护多个站点更困难。然而,这绝对值得考虑。 – 2009-08-31 15:51:20

+0

如果你确实需要(我这样做),你只需要维护多个数据库。使用单个数据库也可以实现同样的功能,只需使用列来标识特定行数据与哪个站点相关联,然后根据文件夹过滤视图。 – richardtallent 2009-08-31 16:20:32