Для начала описание рабочей утлилиты:
Для работы нужен .net 4.5
usrutility.exe позволяет:
Добавлять, удалять, изменять, переименовывать пользователей. Совместима с SQL версией, т.е. обновляет файл 1cv7.dba. Так же проверяет не запущен ли конфигуратор, т.к. если при запущенном конфигураторе изменить users.usr и 1cv7.dba настройки подключения к SQL будут сброшены конфигуратором.
Просмотреть список пользователей и их параметры. Может выгружать список в трех форматах csv, xml, txt.
Может создавать пустой users.usr.
Парметры командной строки :
usrutility.exe [-f:\usrdef\users.usr] | [-d:] [options] [account options] [list options]
- полный путь к каталлогу базы.
[options]
-w = ожидать нажатия клавиши после завершения
-l = вывести список пользователей из "userdef.usr"
-dba = показать расшифрованное содержимаое "1cv7.dba"
-add = добавить новую учетную запись. должно быть задано хотя бы имя пользователя
-change = изменить учетную запись (для переименования нужно указать параметр -usernewname)
-delete = удалить учетную запись
-r = пересоздает поток "Container.Contents". Включает в него все потоки учетных записей, найденные в файле.
[account options] - эти параметры нужны для команд -add, -chage, -delete. Если в значени параметра нет пробелов, можно указывать без двойных кавычек.
-UserName:"Name" = имя учетной записи. Можно указывать с пробелами, тире и прочими символами.(1С принимает нормально, но не дает записать из конфигуратора.)
-UserPassword:"password" = пароль. Хэш вычисляется автоматически с учетом "предпочтений" 1с. Т.е. пароль режется до 10 символов и переводится в верхний регистр.
-UserFullName:"full name" = полное имя пользователя
-UserRights:"rights" = название набора прав.
-UserInterface:"interface" = название интерфейса.
-UserDirectory:"path" = каталог пользователя.
[list options] - параметры вывода списка
-lf:csv|xml|txt|ssv = формат вывода списка. текстовый, csv - поля разделеные запятыми, ssv - поля разделенные точкой с запятой, xml - вывод списка в формате XML.
-sm = не выводить служебные сообщения. Нужен например для формирования списка в XML.
sh = выводить заголовки полей в форматах csv,ssv.
Примеры:
UsrUtility.exe -f:users.usr -add -username:Иван -userfullname:"Иван Петров " -userpassword:qwerty -userinterface:Полный -userrights:Пипец -UserDirectory:"./users\Иван"
Создаст нового пользователя с именем "Иван", полным именем "Иван Петров", паролем "QWERTY", интерфейсом "Полный" и набором прав "Пипец", каталог пользователя - "./users\Иван".
UsrUtility.exe -f:users.usr -change -username:"Иван Иваныч" -userpassword:сложныйпароль
Изменит пользователю "Иван Иваныч" пароль на "СЛОЖНЫЙПАР".
UsrUtility.exe -f:users.usr -l -sm -lf:xml >userdef.xml
сформирует файл xml примерно такого содержания:
0
202CB962AC59075B964B07152D234B70
Иван Петров
./users\Иван
1
Полный
Пипец
0
202CB962AC59075B964B07152D234B70
Иван Иванович Иванов
./
1
Админ
Администратор
Класс .Net UserDefworks реализует набор процедур и классов для работы с файлом списка пользователей users.usr вот краткое описание:
Нужен .Net 4.5
Класс UserItem, описывает элемент учетной записи пользователя:
публичные поля:
Name (string)
PageName (string)- служебное поле содержит имя потока в файле users.usr
CheckRights (int)
PasswordHash (string)
FullName (string)
UserCatalog (string)
RightsEnabled
UserInterface (string)
UserRights (string)
поля доступны через индексатор пересичлением UserParameters.
Констурктор поддерживает создание объекта из массива байт. Так же функция Serialyze() формирует массив байт для записи в поток.
Основной используемцй класс - UsersList - потомок Dictionary
Конструктор может загружать в список файл users.usr по переданному пути.
Обекты доступны через индексатор по имени пользователя.
Функция Save() сохраняет текущий список в файл users.usr по переданному пути.
краткий пример
using UserDef;
namespace Example
{
class Example
{
[STAThread]
static void Main(string[] args)
{
string USRfileName = @"C:\MyDB\userdef\users.usr";
string DatabaseCatalog = Path.GetDirectoryName(Path.GetDirectoryName(USRfileName));
//Загрузим текущий список пользователей
UserDefworks.UsersList Users = new UserDefworks.UsersList(USRfileName);
string UserName = "User1";
//Изменим параметры пользователя в списке.
if (Users.ContainsKey(UserName))
{
UserDefworks.UserItem User = Users[UserName];
User.FullName = "Владимир Владимироваич Путин";
User.UserInterface = "Президент";
User.UserRights = "IDDQD";
User.PasswordHash = UserDefworks.GetStringHash("sdlfhw342e8");
}
UserName = "User2";
//Создадим нового пользователя
UserDefworks.UserItem User2 = new UserDefworks.UserItem(
UserName, //Имя потока
1, //Контроль прав
UserDefworks.GetStringHash("qwerty"), //Пароль
"Зинаида Петровна", //Полное имя
DatabaseCatalog, //Каталог пользователя
"ИнтерфейсБухгалтера", //Интерфейс
"ПраваБухгалтера", //Набор прав
"Зинуля" //Имя пользователя
);
//Добавим его в список
Users.Add(User2);
//Теперь он доступен по индексу "Зинуля"
Console.WriteLine(Users["Зинуля"].FullName);
//Удалим пользователя из списка
Users.Remove("User3");
try
{
if (Users.Save(USRfileName))
{
Console.WriteLine("Усё пучком!");
}
else
{
Console.WriteLine("Чегой-то не то!");
}
}
catch (Exception ex)
{
Console.WriteLine("Ошибка - {0}", ex.Message);
}
}
}
}