anchor.diff:  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
  +  TUser = class                                                                 // trida reprezentujici uzivatele
      private
  -    fpasswd:string;
  -    fban:boolean;
  -    freg:boolean;
  -
  -      procedure SetPasswd(passwd:string);
  -      procedure SetBan(state:boolean);
  -      procedure SetReg(state:boolean);
  +    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;
  -    firstname:string;
  -    lastname:string;
  -    root:boolean;
  -    OblR: TDictionary<string, TORControlRights>;
  -    lastlogin:TDateTime;
  +    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;
  
positive.code: begin
   if (Self.freg = state) then Exit();
   Self.freg := state;
   if (Self.freg) then
    begin
     // odpojit vsechny regulatory uzivatele
    end;
  end;//procedure
  
  ////////////////////////////////////////////////////////////////////////////////
  
negative.code: 
  class function TUser.ComparePasswd(plain:string; hash:string):boolean;
  begin
   Result := (hash = TUser.GenerateHash(AnsiString(plain)));
  end;//function
  
  class function TUser.GenerateHash(plain:AnsiString):string;
  