Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
Алексей Пикуров
Стоит задача: есть руководители подразделений, им нужно разрешить запускать плагин UltraVNC (версия 1.6 и старше) для удалённого просмотра по сети экранов компьютеров сотрудников, но только своих подразделений. Управлять мышкой и клавиатурой — нельзя. Скрипт должен также отправлять соответствующие уведомления о невозможности начать сеанс удалённого просмотра экрана, если пользователю это запрещено.

Администраторов сети эти ограничения касаться не должны.

Всё это можно реализовать таким скриптом:

lockvnc.png
Скрипт для тонкого управления, кому из пользователей можно использовать плагин UltraVNC для просмотра экрана, а кому — нет.
lockvnc.png (111.88 КБ) Просмотров: 7159


Исходный текст скрипта:
Код: Выделить всё
// ---------------------------------------
// Script created by Alexey Pikurov / Network Software Solutions
// 28.11.2016 16:58:47
// ---------------------------------------
const
  sAdmGroup = 'Администраторы';
  sErrMsg1  = 'У вас нет доступа к этому пользователю';
  sErrMsg2  = 'Вы можете только просматривать экран этого пользователя';
 
function OnClientPluginSendRawData(iCID, iUINFrom, iUINTo: integer; sPluginNameFrom, sPluginNameTo, sData: string): boolean;
var
  bFlag: boolean;
  iDeptID1, iDeptID2: integer;
  sMsg: string;
begin
  bFlag := true;

    // если пользователь открывает плагин VNCClient
    if (sPluginNameFrom = 'VNCClient') and (sPluginNameTo = 'VNCServer') then
      // если это не пользователь из группы прав "Администраторы"
      if mGetRoleNameByID(mGetUserRoleID(iUINFrom)) <> sAdmGroup then begin
        // если пользователь собирается только смотреть экран удалёного компьютера
        if sData = 'VNCGETLOCALIPS-VIEW' then begin
          bFlag := false;   
     
          iDeptID1 := mGetUserDepartmentID(iUINFrom);
          iDeptID2 := mGetUserDepartmentID(iUINTo);

            // если пользователи из одного и того же подразделения
            // и iUINFrom - руководитель этого подразделения
            if iDeptID1 = iDeptID2 then bFlag := mIsUserTeamLead(iUINFrom);
           
            if not bFlag then sMsg := sErrMsg1;
        end else
        // если пользователь собирается контролировать мышку и клавиатуру,
        // то запрещаем эму открывать сеанс VNC
        if sData = 'VNCGETLOCALIPS-CONTROL' then begin
          sMsg := sErrMsg2;
          bFlag := false;
        end; 
     
        if not bFlag then
          // отправляем пользователю сообщение о невозможности
          // открыть сеанс удалённого администрирования
          mSendCustomMsgToClientConsoleByCID(iCID,
                                             sMsg +
                                             ' (' + mGetUserAttribute(iUINTo, 'DisplayName') + ')',
                                             'Error', true, true, 77);
      end; 
 
  result := bFlag;
end;

begin

end.


В скрипте предполагается, что ваши администраторы находятся в группе с названием "Администраторы". Если это не так — подправьте константу sAdmGroup.

Также руководителям подразделений следует назначить должности в их личных профилях:

workposition.png
Указание должности в профиле пользователя MyChat на сервере в управлении пользователями
workposition.png (33.63 КБ) Просмотров: 7159


...и не забудьте указать, что они — руководители подразделений (будут дополнительно отображаться синим цветом):

workpositionsteamlead.png
Как указать что должность — руководитель подразделения. Настройка в управлении пользователями на MyChat Server
workpositionsteamlead.png (47.41 КБ) Просмотров: 7159