ugrás a tartalomhoz

jogosultságkezelés view-ban?

Szekeres Gergő · 2009. Feb. 10. (K), 15.45
tudom, hogy számtalan topic létezik mvcvel kapcsolatban, engem viszont konkrétan az adott probléma megoldása érdekel:

vegyünk példának egy egyszerű listát, ahol a rendszerben található felhasználók jelennek meg. Legyen mondjuk 1, 2 illetve 3as jogosultsági szint, mindenki az alatta lévőeket törölheti. belépünk mondjuk a 2es szintű userrel, így a listában meg kellene jelennie egy törlés ikonnak mindenkinél, aki 1es szinten van. Ez kinézhet a következőképpen (egyszerüsítve):
  1. //controller  
  2. class UserController {  
  3.   public function list() {  
  4.     $users = new userHandling();  
  5.     $users->Get();  
  6.     $view = new View("userlist");  
  7.     $view->users = $users;  
  8.     $view->user = new auth();  
  9.   }  
  10. }  
  1. //view  
  2. foreach($users as $u) {  
  3.  if($u->level < $user->level)  
  4.   echo 'törlésikon';  
  5. }  
letöltjük az adatokat, átadjuk a modellt a viewnak ami végigmegy az indexelt objektumon, és ellenőriz minden sorban.

Ez akár még jó is lehet, hogy ha egy státuszt kell figyelni, de nincs valami módszer arra, hogy a viewból kivegyük az authorizációs részeket? Ennek szerintem a modellben lenne a helye, de a gyarkolatban mennyire megvalósítható egy ilyen megoldás? Ti hogy csináljátok?
 
1

Jó a kérdés, engem is érdekel.

s_volenszki · 2009. Feb. 10. (K), 16.52
Foglalkoztam már én is hasonló kérdéssel. Én ide jutottam:

Azt feltételezzük, hogy a feladatokat jogosultság szerint hajthatjuk végre. Egy alap eset úgy néz ki, hogy meghívjuk a kívánt funkciót, átadva neki a szükséges adatokat, köztük a jogosultságunkat is. Ha minden rendben van és van hozzá jogosultságunk, a funkció végbemegy.

Tehát, ha van egy mágneskártyánk mágneszárhoz, attól, hogy az nem nyitja azt, attól még van!

Azaz a view-ban kódolt kitétel kizárólag megspórolja azt, hogy egyáltalán lehúzzuk az amúgy sem érvényes mágneskártyánkat.

Na, akkor ez most kinek a feladata?
2

el se jusson a kárgyaolvasóig

Szekeres Gergő · 2009. Feb. 10. (K), 17.03
nyilván a funkció nem futhat le, hisz fennakadna a user a jogosultságellenőrzésen, de sokszor kérik, hogy ne jelenjen meg a gomb(teljesen jogosan). De mondhatok más példát is: validálás/invalidálás. a view döntse el, hogy a validál vagy az invalidál gomb jelenjen meg? Mind a kettőt nem rakhatjuk ki, mert a validált usert minek validálnánk újra.
3

Üzleti logika csak modellben lehet

Ktamas · 2009. Feb. 10. (K), 18.08
Szerintem a "$u->level < $user->level" az nem szerepelhet a viewban mivel ez (hogy milyen szintű user milyen szintű usert törölhet) az üzleti logika része, így egyértelműen a modellben a helye.

Ehhelyett inkább próbáld meg vhogy így:
  1. foreach($users as $u) {    
  2. #  if($user->hasRightToDelete($u))    
  3. #   echo 'törlésikon';    
  4. # }    
Ez azértis jobb mert a későbbiekben nem biztos, hogy csak a jogosultság szintjétől fog függeni a törölhetőség (vagy akármilyen másik jog). Így a későbbiekben egyszerűen, egy helyen meg lehet változtatni az ellenőrzést.

Remélem ez segít.

Üdv,
Tamás