Установите маршрут {арендатор} / {контроллер} / {действие} / {идентификатор} с ASP.NET MVC?

Как разъяснение - с точки зрения сервера, страница, которую требует запрос Ajax, по существу не отличается от стандартного HTTP, получают запрос, сделанный пользователем, нажимающим на ссылку. Все нормальные свойства запроса: агент пользователя, IP, сессия, cookie, и т.д. передается серверу.

9
задан Joannes Vermorel 9 November 2009 в 09:15
поделиться

2 ответа

В настоящее время я работаю над аналогичным проектом с использованием ASP.Net MVC, проверки подлинности форм и поставщиков SQL для членства / ролей / профиля. Вот подход, который я использую:

  1. Зарегистрируйте маршрут по умолчанию как `{tenant} / {controller} / {action} / {id}

  2. Измените поведение по умолчанию для FormsAuthenticationService, которое поставляется со стандартным шаблоном MVC. Он должен установить UserData билета проверки подлинности, чтобы включить имя клиента (из вашего маршрута).

     public void SignIn (string userName, bool createPersistentCookie, string tenantName) 
     {
    var ticket = new FormsAuthenticationTicket (1, userName, DateTime.Now, DateTime.Now.AddMinutes (30), 
    createPersistentCookie, tenantName); 
    var cookie = new HttpCookie (FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt (ticket)); 
    HttpContext.Current.Response.AppendCookie (cookie) (cookie) {1}}} 
     
  3. В вашем файле global.asax, чтобы выполнить некоторую проверку безопасности клиента и разрешить разделение пользователей между клиентами в одной базе данных членства

     protected void Application_AuthenticateRequest (объект-отправитель, EventArgs e) { {1}} {
     // Поскольку этот метод вызывается при каждом запросе 
     // мы хотим сбой как можно раньше 
    if (! Request.IsAuthenticated) return; { {1}} var route = RouteTable.Routes.GetRouteData (новый HttpContextWrapper (Context)); 
    if (route == null || route.Route.GetType ().Name == "IgnoreRouteInternal") return; 
    if (! (Context.User.Identity is FormsIdentity)) return; 
     // Получение текущего клиента, указанного в URL 
    var currentTenant = route.GetRequiredString ("tenant"); 
     // Получение клиента, в который вошел пользователь, 
     // из билета проверки подлинности форм 
    var id = (FormsIdentity) Context.User.Identity; 
    var userTenant = id.Ticket.UserData; 
    if (userTenant.Trim (). ToLower ()! = CurrentTenant.Trim (). ToLower ()) {{ 1}} {
     // Пользователь пытается получить доступ к другому арендатору 
     // чем тот, в который он вошел, поэтому выйдите из системы 
     // и выполните перенаправление в дом страница нового клиента 
     // где они могут снова войти в систему (если они авторизованы!) 
    FormsAuthentication.SignOut (); 
    Response.Redirect ("/" + currentTenant ); 
    return; 
    } 
     // Настраиваем приложение поставщиков Sql 
     // на текущий тенант для поддержки секционирования 
     // пользователей между арендаторами. 
    Membership.ApplicationName = currentTenant; {{1} } Roles.ApplicationName = currentTenant; 
    ProfileManager.ApplicationName = currentTenant; 
    } 
     
  4. Разделите данные каждого арендатора. Вот два варианта:

    4a. Используйте отдельную базу данных для каждого арендатора. Это обеспечивает лучшую защиту данных для ваших клиентов. В базе данных общего членства добавьте таблицу, которая привязана к уникальному идентификатору приложения для каждого клиента, и используйте эту таблицу для хранения и получения строки подключения на основе текущего клиента.

    4b. Храните все данные в одной базе данных и используйте для каждой таблицы уникальный идентификатор клиента. Это обеспечивает немного меньшую защиту данных для ваших клиентов, но использует только одну лицензию SQL Server.

12
ответ дан 4 December 2019 в 14:29
поделиться

Это довольно удобный ресурс для соглашений об именах Java http://geosoft.no/development/javastyle.

2
ответ дан 4 December 2019 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: