Főoldal   Súgó Bejelentkezés Regisztráció  
Üdvözlünk, Vendég. Kérlek jelentkezz be vagy regisztrálj.

Jelentkezz be a felhasználóneveddel, jelszavaddal és add meg a munkamenet hosszát
1 évet fizetsz kettőt kapsz a CakePHP tárhely programban!
Silver csomag pl.: 1000MB tárhely, MySQL vagy PostgreSQL.
.hu domain címmel - 12.900 Ft + Áfa / 2év
Hírek: Exkluzív bejelentés CSAK CakePHP.hu fórumlátogatóknak!  Általános blabla...
Oldalak: [1]   Le
Nyomtatás
Téma: Hozzáférés ellenőrzése nézetben  (Megtekintve 188 alkalommal)
« Dátum: 2011. December 10. - 23:54:07 »
kisspepe Nem elérhető
Kölyök tag

Profil megtekintése E-mail
**
Hozzászólások: 88



Sziasztok!

A hozzáférés vezérlést action-ök alapján végzem.

A kérdésem az lenne, hogy megoldható-e az, hogy nézetben egy link csak akkor jelenjen meg, ha a hivatkozott action-ra van hozzáférési jogom.

Én úgy gondolom, hogy egy if-el ellenőrizném az adott action-ra a belépett felhasználó jogosultságát, és ha a jogosultság megvan, akkor kiírom a linket.

A probléma, hogy nem tudom hogyan ellenőrizzem, hogy van-e joga a felhasználónak az adott actionhoz.
Naplózva
« Válasz #1 Dátum: 2011. December 11. - 08:59:58 »
sipiatti Nem elérhető
Újonc

Profil megtekintése E-mail
*
Hozzászólások: 43



ha acl-t használsz, akkor     $this->Acl->check( $aro, $aco, $action = '*');
de itt az action nem controller actiont jelent, hanem acl actiont (pl. crud, vagy saját ha alkottál)
az $aro a usered, az $aco meg a controller action a fában.

ha csoportokat alkottál, akkor meg a user csoportot ellenőrzöd "osztjóvan"

szép dolog az acl, de ha az appban nem lesznek szerepkörök öröklődéssel, akkor anyahajóval verébre a helyzet Mosolyog nincs sok értelme. gyakorlásnak jó...

szerk. link: http://book.cakephp.org/view/1249/Checking-Permissions-The-ACL-Component
Naplózva
« Válasz #2 Dátum: 2011. December 11. - 11:30:38 »
kisspepe Nem elérhető
Kölyök tag

Profil megtekintése E-mail
**
Hozzászólások: 88



És ennek nézetben is működnie kellene?

A nézetben egy element-ben a következő kód:
Kód:
28 if($this->Acl->check(array(
29 'model' => 'Group', 'foreign_key' => $logged_in['User']['group_id']
30 ), 'adminmenu', $action = '*')) {
31 echo 'Van jogom!';
32 }
33
34 else {
35 echo 'Nincs jogom!';
}

A következő hibaüzenetet adja:
Idézet
Fatal error: Call to a member function check() on a non-object in C:\xampp\htdocs\aruhaz\app\views\elements\menu\adminmenu.ctp on line 28

A
Kód:
$logged_in['User']['group_id']
a megfelelő csoport azonosítót adja, leelenőriztem.

Az aco tábla úgy van felépítve:
- controllers
   - modell neve
        - action neve
        - action neve
   - modell neve
        - action neve
Naplózva
« Válasz #3 Dátum: 2011. December 11. - 11:33:47 »
sipiatti Nem elérhető
Újonc

Profil megtekintése E-mail
*
Hozzászólások: 43



Acl komponenst tedd be a komponensek közé. Akár az app_controller.php-ba is teheted
Naplózva
« Válasz #4 Dátum: 2011. December 11. - 11:34:43 »
rrd Nem elérhető
Adminisztrátor
Teljes tag

Profil megtekintése WWW E-mail
*****
Hozzászólások: 206



Acl nélkül meg ilyesmi:
Kód:
if($session->read('Auth.User.id')){
   //akármik kiírása
}
if($session->read('Auth.User.csoport_id') == 1){
   //valami más
}
Naplózva
« Válasz #5 Dátum: 2011. December 11. - 12:19:05 »
kisspepe Nem elérhető
Kölyök tag

Profil megtekintése E-mail
**
Hozzászólások: 88



Bent van az Acl a komponensek között.

Kód:
var $components = array('Acl', 'Auth', 'Session', 'Cookie', 'requestHandler');
Naplózva
« Válasz #6 Dátum: 2011. December 11. - 12:22:15 »
kisspepe Nem elérhető
Kölyök tag

Profil megtekintése E-mail
**
Hozzászólások: 88



Amit írtál nem igazán értem.

Nekem arra lenne szükségem, hogy pl. a következő link:

Kód:
<?php 
echo 
$this->Html->link(__('Home'true), array(
'controller' => 'products',
'action' => 'index',
'admin' => false
)
);
?>


Megjelenjen ha a products/index-hez van hozzáférése az adott felhasználónak, és ne jelenjen meg ha nincs, és ezt nem akarom csoportonként ellenőrizni, mert adott esetben nem tudom hány csoport van a rendszerben.
« Utoljára szerkesztve: 2011. December 11. - 12:24:40 írta kisspepe » Naplózva
« Válasz #7 Dátum: 2011. December 11. - 16:56:06 »
sipiatti Nem elérhető
Újonc

Profil megtekintése E-mail
*
Hozzászólások: 43



Most látom hogy elementben van a kódod.
Az element nem lát rá a teljes objektumra, át kell adni neki amit használni akarsz.
Próbáld ki ezt
a viewban:
echo $this->element('akarmi',array('acl',$acl))         // vagy $acl helyett $this->Acl

az elementben:
$acl->check(.....)
Naplózva
« Válasz #8 Dátum: 2011. December 11. - 18:45:14 »
kisspepe Nem elérhető
Kölyök tag

Profil megtekintése E-mail
**
Hozzászólások: 88



Namost én a layout-ba illesztem be az element-et, ha megadom neki azt amit írtál, akkor:

Idézet
Undefined property: View::$Acl
Naplózva
« Válasz #9 Dátum: 2011. December 11. - 18:52:15 »
sipiatti Nem elérhető
Újonc

Profil megtekintése E-mail
*
Hozzászólások: 43



ja igen, mert Acl helper nincs, marad $this->Acl
Naplózva
« Válasz #10 Dátum: 2011. December 11. - 21:13:44 »
kisspepe Nem elérhető
Kölyök tag

Profil megtekintése E-mail
**
Hozzászólások: 88



Azt is próbáltam, de úgy is hibaüzenetet dob.

Mindegy, megoldottam másképpen. Az app_controllerben lekérdeztem, és átadtam az elementnek.
Naplózva
« Válasz #11 Dátum: 2011. December 12. - 12:40:28 »
rrd Nem elérhető
Adminisztrátor
Teljes tag

Profil megtekintése WWW E-mail
*****
Hozzászólások: 206



Igen így a helyes. Másként sérül az MVC ami nem a világvége de legalább mutatja, hogy rossz felé tapogatózik az ember.
Naplózva
Oldalak: [1]   Fel
Nyomtatás
Ugrás:  

2007 CakePHP Magyarország Fóruma
Powered by SMF 1.1.4 | SMF © 2006, Simple Machines LLC
Magyar fordítás: SMF Magyarország
| Üzemelteti / Hosting: Elite Media     -     Támogatóink: Loovers Szexshop | És a HHO generátor