Пакетное создание пользователей экстрасети в Composite C1

Я нахожусь в процессе создания веб-сайта, который в ближайшем будущем заменит существующий веб-сайт. Существующий веб-сайт содержит прибл. 300 пользователей, которых мне нужно «импортировать» в приобретённый мной экстранет-модуль в композите.

Есть ли способ пакетного создания пользователей в модуле экстрасети?


person user1784131    schedule 07.01.2013    source источник


Ответы (2)


Да, вы можете импортировать существующую базу данных пользователей. Вы можете сделать это, написав сценарий и запустив его выполнение на своем веб-сайте, или напрямую манипулируя базовой таблицей SQL/файлом XML (в зависимости от того, что вы используете для хранения данных Composite C1). Вы также можете создать провайдера, который связывает вашу существующую базу данных пользователей с Composite C1 Extranet.

Импорт пользователей программным способом. Для подхода со сценарием см. такие методы, как AddNewUser, описанные в http://docs.composite.net/Packages/Community/Extranet/CompositeCommunityExtranetDeveloperGuide/Using-Extranet-Facade.-Methods

Вы должны написать этот сценарий как веб-службу, страницу aspx или что-то подобное, которое выполняется на веб-сайте Composite C1.

Если вы используете Экстранет с настройками по умолчанию, ожидайте, что providerName будет «По умолчанию».

Непосредственное управление физическим хранилищем данных. Это зависит от того, какое хранилище данных вы используете. Я предлагаю вам добавить нужные вам группы и тестового пользователя, чтобы помочь вам распознавать данные при просмотре базовых файлов XML/таблиц SQL.

  • Если вы используете XML (по умолчанию), вам следует сосредоточиться на файлах Composite.Community.Extranet.DefaultProvider.DataTypes.DefaultProvider*.xml, расположенных в папке ~/App_Data/Composite/DataStores. Есть 3 файла sush: один для групп, один для пользователей и один для отношений между пользователями и группами.

  • Если вы работаете на SQL Server, вам следует сосредоточиться на трех таблицах с именами Composite.Community.Extranet.DefaultProvider.DataTypes.DefaultProvider*.

В обоих случаях вам потребуется добавить новые записи в таблицу User/xml-файл и сопоставление групповых отношений с таблицей/xml-файлом GroupUser. Когда вы добавляете пользователя, вы предоставляете уникальный идентификатор, и этот идентификатор вы повторно используете для регистрации пользователя в GroupUser.

Когда вы внесли изменения, вы можете принудительно перезагрузить Composite C1, используя Инструменты | Команда Restart Server в консоли C1. Если вы сделаете резервную копию файлов/таблиц перед внесением изменений, вы можете легко вернуться, восстановив резервную копию (на случай, если вам нужно будет начать заново).

Написание поставщика пользователей/групп. Если ваши пользовательские данные находятся во внешнем хранилище и вы хотели бы сохранить их там, вы также можете создать мост между этим существующим хранилищем пользователей и Экстранетом Composite C1, создав пользовательский провайдер. Если это важно, см. http://docs.composite.net/Packages/Community/Extranet/CompositeCommunityExtranetDeveloperGuide/Writing-Custom-Extranet-Providers

person mawtex    schedule 07.01.2013

Спасибо. Теперь это работает. Я импортировал пользователей программно. Я открыл композитное решение в Visual Studio и добавил страницу aspx. Вот код позади.

using System;
using System.Collections.Generic;
using System.IO;
using Composite.Community.Extranet;
using Composite.Community.Extranet.Data;

public partial class ImportUsers : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string path = Server.MapPath("UsersToImport.csv");
        StreamReader _streamReader = new StreamReader(path);

        IList<Guid> userIds = new List<Guid>();
        string line;
        while ((line = _streamReader.ReadLine()) != null)
        {
            string[] fields = line.Split(',');
            IExtranetUser extranetUser = new ExtranetUser();
            extranetUser.Name = fields[0];
            extranetUser.UserName = fields[1];
            extranetUser.Email = fields[2];
            extranetUser.IsApproved = true;

            IExtranetUser addedUser = ExtranetFacade.AddNewUser("Default", extranetUser);
            userIds.Add(addedUser.Id);

            ExtranetFacade.SetUsersForGroup("Default", new Guid("bc728100-e28e-4135-a14c-bead6e0b9b00"), userIds);
            Response.Write(string.Format("User: {0} added at {1}", addedUser.UserName, addedUser.CreationDate));
        }
    }
}
person user1784131    schedule 17.01.2013