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):

 //controller
 class UserController {
   public function list() {
     $users = new userHandling();
     $users->Get();
     $view = new View("userlist");
     $view->users = $users;
     $view->user = new auth();
   }
 }

 //view
 foreach($users as $u) {
  if($u->level < $user->level)
   echo 'törlésikon';
 }
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:

# foreach($users as $u) {  
#  if($user->hasRightToDelete($u))  
#   echo 'törlésikon';  
# }  
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