Обсуждение:Проверка пользователя на принадлежность группе

5 (1)
  • Развернуть Обсуждение:Проверка пользователя на принадлежность группе ( Обсуждение примера  09.01.2004 07:04 )
    0(0)
    macro ПроверитьГруппуПользователей(aOper, aGroup);
    Вернет True если aOper в группе aGroup.


    Посмотреть пример
    >> Ответить
    • Развернуть ага, идеи витают в воздухе ;) ( dd  30.01.2004 19:16 )
      0(0)
      странно, но в нескольких банках я видел макросы, в тексте которых для каких-то проверок явно перечислялись номера операционистов :)))))

      ==============
      file lib1_listgrup(listgrup);
      file lib1_opergrup(opergrup);

      macro MemberOf(ss, sss) /* проверка группы пользователя
      ss - название группы (текст)
      sss - номер юзера */
      if (ValType(sss) == V_UNDEF)
      sss = {oper};
      end;
      rewind(lib1_listgrup);
      while (next(lib1_listgrup))
      if (lib1_listgrup.Name == ss)
      lib1_opergrup.GroupNum = lib1_listgrup.Number;
      lib1_opergrup.Oper = sss;
      if (GetEQ(lib1_opergrup))
      return true;
      end;
      end;
      end;
      return false;
      end;
      ===============
      >> Ответить
      • Развернуть Я для этого пользуюсь следующими двумя функциями (+) ( григ  02.02.2004 07:48 )
        1(1)
        Переменные в функциях объявлены как local, что исключает возможные конфликты с внешними глобальными переменными.
         /*Проверить является ли опер членом группы с наименованием,
           содержащим заданный образец*/
         macro hl_OperIsMemberOfGroup(code,obr)
          /*ищем группы, наименование которых содержит заданное слово*/
          local var listgrup,opergrup,cont;
          listgrup=TBFile("listgrup.dbt","R",0);
          opergrup=TBFile("opergrup.dbt","R",0);
          listgrup.Rewind;
          cont=listgrup.next;
          while(cont)
           if(index(StrUpr(listgrup.Rec.Name),StrUpr(obr))>0)
            opergrup.Rec.GroupNum=listgrup.Rec.Number;
            opergrup.Rec.Oper=code;
            if(opergrup.GetEQ) return true; end;
           end;
           cont=listgrup.next;
          end;
          return false;
         end;
        
         /*Вернуть строку через ; оперов, являющихся членами группы с наименованием,
           содержащим заданный образец*/
         macro hl_GetOpersOfGroup(obr)
          /*ищем группы, наименование которых содержит заданное слово*/
          local var listgrup,opergrup,cont,t,cont1;
          listgrup=TBFile("listgrup.dbt","R",0);
          opergrup=TBFile("opergrup.dbt","R",0);
          t=";";
          listgrup.Rewind;
          cont=listgrup.next;
          while(cont)
           if(index(StrUpr(listgrup.Rec.Name),StrUpr(obr))>0)
            /*считываем номера оперов*/
            opergrup.Rec.GroupNum=listgrup.Rec.Number;
            opergrup.Rec.Oper=0;
            cont1=opergrup.GetGE;
            while(cont1 and (opergrup.Rec.GroupNum==listgrup.Rec.Number))
             t=t+string(opergrup.Rec.Oper)+";";
             cont1=opergrup.Next;
            end;
           end;
           cont=listgrup.next;
          end;
          return t;
         end;
        

        >> Ответить