Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Gdje fulam s setom pobrojanih vrijednosti ?

[es] :: Pascal / Delphi / Kylix :: Gdje fulam s setom pobrojanih vrijednosti ?

[ Pregleda: 2077 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

komplikator
Programer / sys. inženjering
CRO

Član broj: 29755
Poruke: 158
*.adsl.net.t-com.hr.

ICQ: 13387003


+8 Profil

icon Gdje fulam s setom pobrojanih vrijednosti ?03.03.2009. u 11:39 - pre 184 meseci
Pozdrav forumašima.

Radim neki sustav privilegija, manje bitno...
Uglavnom, planiram enumerated vrijednosti seta utrpati u string, a string nekamo zapisati (npr, u bazu) i obrnuto. To nije problem, problem je što mi compiler stalno javlja grešku [Error] Project2.dpr(23): Type 'TOvlast' has no type info bez obzira na direktivu {$M+}. Gdje griješim?

Primjer:

Code:

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils, TypInfo;

{$TYPEINFO ON}
 type
   TOvlast = (acces=1,read,add,edit,delete,print,exec,special,modedit);
{$TYPEINFO OFF} 
   Tdozvola = set of Tovlast;
var
   myperm : Tdozvola;
   br     : integer;

   begin
   myperm := [acces,edit,print,exec];
   myperm := myperm + [read];


   for br := ord(low(TOvlast)) to ord(high(TOvlast)) do
       if Tovlast(br) in myperm then writeln (inttostr(br) + GetEnumName(TypeInfo(Tovlast),br)' je u nizu');


   readln;
end.



EDIT (savkic): Koristi code tagove prilikom slanja koda, lakše se prati.



[Ovu poruku je menjao savkic dana 03.03.2009. u 15:13 GMT+1]
God is real unless is declared as integer.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Gdje fulam s setom pobrojanih vrijednosti ?03.03.2009. u 14:11 - pre 184 meseci
> problem je što mi compiler stalno javlja grešku [Error] Project2.dpr(23): Type 'TOvlast' has no type info bez obzira na direktivu {$M+}. Gdje griješim?

Nemaš "," posle GetEnumName(TypeInfo(Tovlast),br) a pre ' je u nizu'.

BTW da li ti je ovo samo primer ili ti je pravi kod ovakav, ako jeste to bi se verujem moglo lakše napisati.
 
Odgovor na temu

komplikator
Programer / sys. inženjering
CRO

Član broj: 29755
Poruke: 158
*.adsl.net.t-com.hr.

ICQ: 13387003


+8 Profil

icon Re: Gdje fulam s setom pobrojanih vrijednosti ?03.03.2009. u 14:35 - pre 184 meseci
Ma vidim tipfeler, fali mi + prije nastavka stringa no to ne riješava problem.

Petlja se može ljepše napisati tako da se umjesto integera koristi Tovlast tip, no svejedno, ovo je samo onako "probni" kod gdje smišljam koncepciju.

Koncepcija je napraviti neku klasu tipa TUser, koja će između ostaloga imati i property permission koji će biti polje seta Tdozvola (indeksirano prema nekakvom modulu). Napravio bi metodu koja bi od Objekta tipa TUser za određeni parametar modula vratila njegov permission. Ako se user odlogira, logira drugi ili sl. automatski bi mijenjao permissione za određene module.

E, sad... te setove bi spremao u polja neke tablice, a najpogodniji mi je string. String mi je pogodan zato što bi se neki podivljali permission ili novi permission prilikom nadogradnje programa (npr. dodavanje novih modula) mogao jednostavno dodati dopisivanjem u taj string za određeni modul i određenog usera, sve usere i sl.

To je ideja onako na brzinu kako sam je zamislio. Imaš li bolju ideju ili neki savjet rado bih čuo (pročitao) tvoje mišljenje.
God is real unless is declared as integer.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Gdje fulam s setom pobrojanih vrijednosti ?03.03.2009. u 15:49 - pre 184 meseci
> Ma vidim tipfeler, fali mi + prije nastavka stringa no to ne riješava problem.

Moraš napisati: TOvlast = (acces,read,add,edit,delete,print,exec,special,modedit);

BTW, ustaljena je konvencija da se enum članovi pišu sa prefiksom.
Npr:
TAlignment = (taLeftJustify, taRightJustify, taCenter);
TOvlast = (ovAccess, ovRead, ovAdd...);

> E, sad... te setove bi spremao u polja neke tablice,

Misliš jedan slog jedno pravo, UserName, AccessName, Allow?

> a najpogodniji mi je string.

Ako nemaš mnogo objekata prava možeš koristiti i CHAR, svako slovo bi označavalo neko pravo i onda bi samo pobrojao šta je sve dozvoljeno.

Napravi i grupe, kojima se dodaju korisnici a i koje same mogu imati prava pristupa.
 
Odgovor na temu

komplikator
Programer / sys. inženjering
CRO

Član broj: 29755
Poruke: 158
*.adsl.net.t-com.hr.

ICQ: 13387003


+8 Profil

icon Re: Gdje fulam s setom pobrojanih vrijednosti ?03.03.2009. u 18:29 - pre 184 meseci
Hvala na ideji. Imam u vidu i grupe. Imao sam varijantu gdje će korisnik biti ujedno i grupa, ukoliko se označi jedan flag tj. polje no ipak sam se odlučio na drugu varijantu više nalik na acl za linux i nt odnosno na tablice user, group, usergroup (n:n) i permission.

Jedan slog će biti jedan set prava. Primjerice :

ugrp_id | modul | permission

10 | 'frmMatPtt' | [ovRead, ovAdd,ovEdit, ovDelete]
10 | 'frmMatPor' | [ovRead]
12 | 'frmEvURA' | [ovRead,ovAdd, ovExec]

itd... itd...

Sa trpanjem ovlasti u setove, a setova u jedan string (varchar) "štedim" na slogovima i jednostavnije je i preglednije. Nedostatak je što baza sav security prepušta clientu i obilazim cijeli FB-ov. policy mehanizam, no poznavajući njegove manjkavosti baš i ne gubim previše.


Druga varijanta mi je bila napraviti istu stvar sa bitmaskom no ovo sa enumerated setovima mi se čini zgodnije.


God is real unless is declared as integer.
 
Odgovor na temu

komplikator
Programer / sys. inženjering
CRO

Član broj: 29755
Poruke: 158
*.adsl.net.t-com.hr.

ICQ: 13387003


+8 Profil

icon Re: Gdje fulam s setom pobrojanih vrijednosti ?03.03.2009. u 18:48 - pre 184 meseci
Hvala puno, evo naučio sam nešto novo! Znači ako enumerated tip koristim kao RTTI onda mu ne mogu dodijeliti neke vrijednosti kao npr:
Code:
 TNekitip = (ntPrvi=1, ntDrugi=2, ntTreci=4, ntCetvrti=8) 
?

Bitno je da je zezao onaj ntPrvi=1 grrrrr....

Inače, znam ja i lijepše napisati onu for petlju no u novijem Delphiju gdje to mogu, a na poslu imam sedmicu u kojoj nema for-in-do petlje.
God is real unless is declared as integer.
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
212.200.218.*



+62 Profil

icon Re: Gdje fulam s setom pobrojanih vrijednosti ?04.03.2009. u 16:10 - pre 184 meseci
Stavi ovako, i imaces bas onako kako si zamislio u pocetku, znaci ovAccess ce biti 1, pa redom

Code:
TOvlast = (ovNone, ovAccess, ovRead, ovAdd, ovEdit, ovDelete, ovPrint, ovExec, ovSpecial, ovModedit);


Stvar je u tome da kompajler bukvalno dodeljuje redom bitove enum konstantama. Ukoliko si nekoj konstanti u tipu dodelio vrednost, npr.


Code:
 (..., oVRead = 5, ...)


kompajler ce naredne enum-e (deklarisane posle ovRead) nastaviti da popunjava od vrednosti 5, znaci ide 6, 7, 8 itd. Medjutim, zbog postojanja "rupa" u ovako deklarisanom enum tipu, vise ne mozes raditi order prebrojavanje istog (low() to high() ).

Rajko
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Gdje fulam s setom pobrojanih vrijednosti ?

[ Pregleda: 2077 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.