Разработка приложения ASP.NET, поддерживающего дочерние сайты - PullRequest
3 голосов
/ 21 мая 2009

Я разрабатываю приложение ASP.NET, которое должно поддерживать «подсайты».

Идея состоит в том, чтобы супер-администратор управлял всеми пользователями, глобальными настройками приложений и дочерними сайтами. Каждый субсайт имеет несколько собственных настроек (таких как локальный администратор, логотип и приветственное сообщение), и каждый субсайт имеет свой список зарегистрированных пользователей.

Это очень похоже на то, что вы получаете, используя CMS, такие как Joomla, SharePoint или DotNetNuke. На самом деле, я испытываю желание использовать такую ​​платформу, но другие требования проекта не позволяют мне сделать это.

На данный момент у меня очень общие вопросы:

  1. Использование Членство в ASP.NET 2.0 , как бы я назначил супер-администратора и классифицировал пользователей на основании подсайта , в котором они зарегистрированы?
  2. Как мне реализовать подсайты (какие шаблоны следует использовать и т. Д.) ? Я особенно заинтересован в статьях, которые объясняют, как другие сделали это. Я хотел бы изучить лучшие практики, полученные другими, не тратя дней на копание в исходном коде большого открытого проекта, такого как DotNetNuke.

Я реализую это в ASP.NET MVC 1.0, поэтому подобные примеры будут наиболее полезны. <Ч /> UPDATE: Мне нравится, как Майк Хэдлоу реализовал мультитенантность , и я решил использовать его работу в качестве отправной точки. См. этот пост для получения информации о том, как я использую SqlMembershipProvider с каждым арендатором, имеющим собственную изолированную базу данных . Это решает мою проблему членства "на основе дочернего сайта".

Ответы [ 2 ]

4 голосов
/ 21 мая 2009

То, что вы пытаетесь, чаще всего называют « мультитенанс », а не «дочерние сайты»

Был похожий вопрос на этот вопрос, и принятый ответ звучит правдоподобно.

2 голосов
/ 21 мая 2009

Извините, если я не понимаю, что означает «дочерний сайт». Используете ли вы этот термин для обозначения идеи создания мини-сайтов на большом мастер-сайте? Если это так, я думаю, я понимаю, что вы хотите сделать, но я должен сказать, что система членства в asp.net 2.0 - это в значительной степени фреймворк, в котором вам нужно будет работать, чтобы создать то, что вы хотите.

В любом случае, как I сделает это (и это основано на членстве .net, используемом «из коробки»):

ASP.NET позволяет присоединять «роли» к пользователям и атрибуты «профиля» для этих пользователей. Профили используются для прикрепления к пользователям таких вещей, как «номер телефона» и другие метаданные, но вы также можете использовать их для привязки к ним своего домашнего «подсайта».

Я хотел бы создать роль под названием globaladmin, создать себя как пользователя и затем назначить вас (и только вас) на эту роль. Затем я создал бы роль «siteadmin» и назначил бы эту роль каждому администратору дочернего сайта, но с особой осторожностью назначил ему запись профиля «site», значение которой соответствует сайту, для которого он является администратором.

Например, 'user123' будет назначен роли 'siteadmin', а их атрибут профиля профиля 'site' может быть 'subsitexyz'. Затем они будут определены как администратор этого сайта.

Вышеуказанное является работоспособным, но если вы действительно хотите сделать это как можно более гладким, создайте свой собственный MembershipProvider (SubsiteMembershipProvider) и создайте новый класс SubsiteMembershipUser , который наследуется от MembershipUser, который возвращает ваш новый поставщик. Затем вы можете добавить свои собственные свойства в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...