GetSet_privils

Internφ programovacφ jazykC/C++Pascal

function GetSet_privils(user_group_role : tobjnum; subject_categ : integer; table : ttablenum; recnum : trecnum; operation :integer; var privils) : Boolean;
BOOL [cd_]GetSet_privils([cdp_t cdp], tobjnum user_group_role, tcateg subject_categ, ttablenum table, trecnum recnum, t_oper operation, uns8 * privils);
function [cd_]GetSet_privils([cdp : cdp_t]; user_group_role : tobjnum; subject_categ : tcateg; table : ttablenum; recnum : trecnum; operation : t_oper; var privils) : Boolean;

Parametry

user_group_role Φφslo subjektu prßv vrßcenΘ funkcφ Find_object
subject_categ kategorie subjektu prßv (CATEG_USER, CATEG_GROUP nebo CATEG_ROLE)
table tabulka deklarovanß v programu nebo jejφ Φφslo - viz podrobnosti
recnum Φφslo zßznamu nebo -1
operation - konstanta OPER_SET - nastavenφ prßv
- konstanta OPER_GET (resp.OPER_GETEFF) - zjiÜt∞nφ nastavenφ prßv p°id∞len²ch (resp. efektivnφch)
privils prßva (nastavenß / zjiÜt∞nß)
[cdp kontextovß prom∞nnß klienta]

Od verze:

5.0

Popis

Obecnß funkce, kterß nastavuje nebo zjiÜ¥uje nastavenφ prßv subjektu prßva k tabulce nebo k zßznamu tabulky, jsou-li v tabulce definovßna zßznamovß prßva.

Je-li operation rovno OPER_SET, funkce nastavuje prßva u₧ivatele nebo skupiny nebo role (rozliÜeno parametrem user_group_role) k tabulce table (parametr recnum = -1), p°φpadn∞ k zßznamu recnum (recnum >= 0).

Pro operation rovno OPER_GET (resp. OPER_GETEFF) funkce vracφ nastavenφ prßv (resp. efektivnφch prßv) p°id∞len²ch u₧ivateli nebo skupin∞ nebo roli (rozliÜeno parametrem user_group_role) k tabulce table (parametr recnum = -1), p°φpadn∞ k zßznamu recnum (recnum >= 0).

Prßva se zadßvajφ resp. vracejφ v parametru privils (struktura 65 bajt∙) - podrobnosti.

Prßva smφ nastavit pouze u₧ivatel, kter² jimi sßm disponuje a mß prßvo p°id∞lovat prßva, jinak dojde k chyb∞ NO_RIGHT (Nemßte prßvo provΘst tuto akci).

Prßva k objekt∙m se nastavujφ takΘ touto funkcφ. Jako table zvolte tabulku tabulek (TABTAB) nebo tabulku objekt∙ (OBJTAB), zßznamovß prßva k zßznam∙m v t∞chto tabulkßch odpovφdajφ prßv∙m k jednotliv²m objekt∙m. ╚φslo zßznamu (parametr recnum) vrßtφ funkce Find_object pro dan² objekt.

Z prvnφho bajtu struktury zφskanΘ funkcφ GetSet_privils jsou d∙le₧itΘ tyto bity:

3.bit4RIGHT_INSERTnastavuje se pro Tabtab, resp. Objtab

4.bit8RIGHT_DELnastavuje se pro tabulku (ZruÜenφ objektu)

8.bit128RIGHT_GRANT nastavuje se pro tabulku (Poskytovßnφ prßv)

Dßle jsou d∙le₧itΘ bity odpovφdajφcφ 6. sloupci tabulky Tabtab nebo Objtab (definice objektu). Prßvo Φφst definici objektu (Pou₧φtφ objektu v dlg Prßva k objektu) signalizuje 3. bit 3. bajtu struktury, prßvo p°episovat definici objektu (Modifikace objektu) signalizuje 4. bit 3. bajtu struktury - viz p°φklad 3.

POZOR! Nezam∞≥ujte prßvo k tabulce jako objektu (prßvo Φφst a modifikovat definici tabulky) a prßva k dat∙m v tΘto tabulce (Φφst, p°episovat hodnoty sloupc∙, vklßdat zßznamy apod.)!

Obecnß funkce GetSet_privils nahrazuje Φtve°ici starÜφch funkcφ Get_object_rights, Get_data_rights, Set_object_rights, Set_data_rights. Alternativnφ cestou nastavenφ prßv k dat∙m je pou₧itφ SQL p°φkazu GRANT.

Hodnota funkce

Funkce vracφ p°i chyb∞ TRUE.

P°φklad 1

type
  privil = array[0..64] of char;

procedure PredatPrava(id: window_id; rec: trecnum);
{***********************************}
// p°edß prßva k zßznamu autora dopisu adresßtovi, jinak by dopis neÜel p°eΦφst 
// (zßznamovß prßva a kolujφcφ dokumenty)
var 
   privils : privil;
   trec    : trecnum;
   cx      : cursor;
   ic      : integer;
   nextusernum : tobjnum;
   
begin
  Get_fcursor(id,cx,nil);
  ic := cx;        // p°epoΦtenφ Φφsla zßznamu z kurzoru na tabulku
  if ic >= 32768 then Translate(cx,rec,0,trec) else trec:=rec;

// preΦφst prßva autora dopisu
  if not GetSet_privils(usernum, CATEG_USER, dopisy, trec, OPER_GETEFF, privils) then begin
// zjiÜt∞nφ, komu je dopis urΦen
  GetSet_next_user(dopisy, trec, 0, OPER_GET, VT_OBJNUM, nextusernum);
// p°edat je adresßtovi
  if GetSet_privils(nextusernum, CATEG_USER, dopisy, trec, OPER_SET, privils) then Signalize;
  end else Signalize;   
end;

P°φklad 2

( prtab je deklarovßn jako array[1..65] of char)

  Find_object("tab1",categ_table,tb);        // tabulka Tab1
  Find_object("tabtab",categ_table,ttab);    // systΘmovß tabulka TABTAB
  Find_object("moje",categ_role,rolenum);    // Φφslo role Moje
// zjiÜt∞nφ prßv role Moje k dat∙m tabulky Tab1 jako celku
  GetSet_privils(rolenum,CATEG_ROLE,tb,-1,OPER_GETEFF,prtab) ;
  intpr:=ord(prtab[1]);    
// obsah 1. bajtu struktury obsahuje globßlnφ prßva, v²sledek je souΦtem konstant
// oznaΦujφcφch jednotlivß prßva
  Info_box("role Moje k dat∙m v Tab1",Int2str(intpr));              

P°φklad 3

(zjiÜt∞nφ prßv u₧ivatele k definici objektu)

type
  privils = record
   first : char;
   second : char;
   third : char;
   next : array[1..62] of char;
  end;
var
  prdef1,prdef2 : privils;
  usernum,obj,otab : short;
  intpr1,intpr2,intpr3 : integer;

begin
  Find_object("objtab",categ_table,otab);    // systΘmovß tabulka OBJTAB
  Find_object("editprivils",categ_pgmsrc,obj);    // program
  Find_object("pavel",categ_user,usernum);   // Φφslo u₧ivatele

  GetSet_privils(usernum,CATEG_USER,otab,obj,OPER_GETEFF,prdef2) ;
  intpr3:=ord(prdef2.third);    

   if intpr3 AND 8 = 8 then  
     Info_box("prava prepisovat objekt","Ano");    
   if intpr3 AND 4 = 4 then  
     Info_box("prava cist objekt","Ano");
...

Viz