anchor.diff:  begin
    if (Self.freg = state) then Exit();
    Self.freg := state;
  - if (Self.freg) then
  -  begin
  -   // odpojit vsechny regulatory uzivatele
  -  end;
  + if (not Self.freg) then ORTCPServer.DisconnectRegulatorUser(self);
   end;//procedure
   
   ////////////////////////////////////////////////////////////////////////////////
  
positive.code: 
  class function TUser.ComparePasswd(plain:string; hash:string):boolean;
  begin
   if (hash = TUser.GenerateHash(AnsiString(plain))) then
    Result := true
   else
    Result := false;
  end;//function
  
  class function TUser.GenerateHash(plain:AnsiString):string;
  
negative.code: unit User;
  
  {
    Trida TUser reprezentuje jednoho uzivatele.
  
    Uzivatel se typicky vyznacuje
     - id (unikatni identifikacni string, napr. "root"),
     - krestnim jmenem a prijmenim,
     - flagy opravnujici ho k jednotlivym cinnostem (napr. \root, \regulator),
     - seznamem oblasti rizeni, ke kterym ma pristup, vcetne nejvyssi pristuppove
       urovne u kazde oblasti rizeni, kterou je schopen autorizovat.
  
    Uzivatel muze dostat ban, v takovem pripad je okamzite odpojen ze serveru
    a neni mu umoznen dalsi pristup.
  }
  
  interface
  
  uses IniFiles, Generics.Collections, RPConst, DCPsha256, SysUtils, Classes;
  
  type
    TUser = class                                                                 // trida reprezentujici uzivatele
     private
      fpasswd:string;                                                             // heslo - hash SHA256
      fban:boolean;                                                               // flag urcujici ban uzivate
      freg:boolean;                                                               // flag urcijici moznost autorizovat regulator
  
        procedure SetPasswd(passwd:string);                                       // nastavi heslo, viz \passwd
        procedure SetBan(state:boolean);                                          // nastavi ban, viz \ban
        procedure SetReg(state:boolean);                                          // nastavi regulator, viz \regulator
  
     public
  
      id:string;                                                                  // unikatni ID
      firstname:string;                                                           // krestni jmeno
      lastname:string;                                                            // prijmeni
      root:boolean;                                                               // flag opravneni root
      OblR: TDictionary<string, TORControlRights>;                                // seznam oblasti rizeni vcetne opravneni
      lastlogin:TDateTime;                                                        // cas posledniho loginu
  
  
        constructor Create(); overload;
  