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