Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [CakePHP] Prosty Panel Administratora, Ciagle panel i panel...
Bureau
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 18.03.2012

Ostrzeżenie: (0%)
-----


Siemanko.

Postanowiłem że zostanę przy cakephp, bo chyba najbardziej odpowiada mi styl pisania kodu, a może tylko mi się wydaje, bo na youtube jest dosyć dużo tutków do tego frameworka (IMG:style_emoticons/default/tongue.gif)

Nie ważne. Opiszę swój problem. Jeśli komuś chce się to czytać to zachęcam, jeśli nie to nie zachęcam (IMG:style_emoticons/default/smile.gif)

Tak więc... Chcę sobie napisać Panel admina. Panel miałby się opierać na katalogu osobnym "/admin".
Panel kumulowałby wszystkie zastrzeżone akcje typu dodaj, edytuj, usuń - oczywiście po zalogowaniu ;p

Co próbowałem ? A no próbowałem zrozumieć tego gościa:
http://www.youtube.com/watch?v=M40PgwLqS2M
Jednak opisuje on juz gotowy kod, gdzie nie ma nawet nic napisanego w akcji login (a może nie powinno ?) (IMG:style_emoticons/default/tongue.gif)

Próbowałem także zrobić tak jak tutaj:
http://www.gigapromoters.com/blog/2007/12/...nel-in-cakephp/
No niestety nie działało.

To by było tyle z tego co czytałem. Ktoś kiedyś mi wspomniał o routingu. Czytałem, zmieniałem w core.php jakieś dane, ale nic z tego nie wyszło (IMG:style_emoticons/default/smile.gif)

Jedyne co udało mi się zrobić to autoryzacje użytkownika, prostą autoryzacje gdzie kodem:
plik:index.ctp
  1. if ($login_u['role'] === 'admin') {
  2.  
  3. echo " ,jestes adminem mozesz edytowac i usuwac uzytkownikow";
  4.  
  5. }

sprawdzałem czy użytkownik jest adminem czy nie jest. Nie wydaje mi się, aby ten sposób był wygodny, a więc postanowiłem coś zrobić w kierunku osobnego PA.

Wiem też że dążąc do pożądanego przeze mnie efektu osobnego PA w każdym kontrolerze muszę napisać akcje z przedrostkiem admin_, np:
Kod
admin_dodaj

a link będzie wyglądał następująco:
Kod
/admin/artykuly/dodaj/


Tyle jednak, że brakuje mi mechanizmu, zrozumienia mechanizmu routingu, o ile w ogóle o to chodzi.
Napisałem to co w/w video w pliku appController to samo co autor tj:
  1. class AppController extends Controller {
  2.  
  3. public $components = array('Auth', 'Session');
  4.  
  5. public function beforeFilter()
  6. {
  7. $this->Auth->loginAction = array("admin" => false, 'controller' => 'users', 'action' => 'login');
  8. $this->Auth->loginRedirect = array('controller' => 'pages', 'action' => '/admin');
  9. $this->Auth->allow('display');
  10. }
  11.  
  12.  
  13. public function beforeRender() {
  14.  
  15. if(!array_key_exists('requested', $this->params)) {
  16. $user = $this->Session->read($this->Auth->sessionKey);
  17. $this->set(compact('user'));
  18. }
  19.  
  20. }
  21.  
  22.  
  23.  
  24. }

Cytat
Napisałem "user" ponieważ napisany mam kod pod edycje uzytkowników (IMG:style_emoticons/default/smile.gif) i z tym wiązałem swój przykładowy skrypt, a w/w kontroler artykułów to tylko przykład (IMG:style_emoticons/default/smile.gif)


Oczywiście w kontrolerze UsersController uzyłem akcji z przedrostkiem admin_.
  1. public function admin_add() {
  2. if ($this->request->is('post')) {
  3. $this->User->create();
  4. if ($this->User->save($this->request->data)) {
  5. $this->Session->setFlash(__('The user has been saved'));
  6. $this->redirect(array('action' => 'index'));
  7. } else {
  8. $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
  9. }
  10. }
  11. }


Niestety po wpisaniu w adres:
Kod
/admin/users/add/

Nie otrzymałem nic. To znaczy otrzymałem błąd oczywiście, ale nie pożądany przeze mnie efekt ; (
Wiem, że coś mi się pomieszać już mogło, coś źle robię JA.

Ktoś może naprowadzić mnie na dobrą drogę, bo boje się, że się zgubię i zniechęcę do dalszej wędrówki (IMG:style_emoticons/default/biggrin.gif) \

Z góry chciałbym podziękować za próby pomocy (IMG:style_emoticons/default/smile.gif)
Pozdrawiam.
Go to the top of the page
+Quote Post
kleus
post
Post #2





Grupa: Zarejestrowani
Postów: 93
Pomógł: 7
Dołączył: 22.10.2009
Skąd: Siędzę

Ostrzeżenie: (0%)
-----


najprosciej bedzie tak:

w pliku core.php
  1. Configure::write('Routing.prefixes', array('admin'));


w AppController
  1. public $components = array(
  2. 'Auth'
  3. 'Session',
  4. );
  5. public $helpers = array('Html', 'Form', 'Session');
  6.  
  7. public function beforeFilter(){
  8. $this->Auth->allow('display'); // akcje dostepne bez logowania
  9. }
  10. public function beforeRender(){
  11. // zabezpieczenie panelu admin... nikt kto nie nalezy do grupy admin nie zobaczy panelu
  12. if(isset($this->params['prefix']) && $this->params['prefix'] === 'admin'){
  13. if($this->Auth->User('group') === 'admin'){
  14. $this->layout = 'admin';
  15. }else{
  16. $this->layout = 'admin_login';
  17. }
  18. }
  19. }


w pliku routes.php
  1. Router::Connect('/admin/:controller/:action', array('controller' => 'pages', 'action' => 'display', 'prefix' => 'admin', 'admin' => true));


przykladowa tabela users
  1. CREATE TABLE IF NOT EXISTS `users` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `username` varchar(40) NOT NULL,
  4. `password` varchar(255) NOT NULL,
  5. `group` enum('admin','regular') NOT NULL DEFAULT 'regular',
  6. `status` enum('active','notactive','suspended','deactivated') NOT NULL DEFAULT 'notactive',
  7. PRIMARY KEY (`id`),
  8. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


Ten post edytował kleus 12.04.2012, 13:04:27
Go to the top of the page
+Quote Post
Bureau
post
Post #3





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 18.03.2012

Ostrzeżenie: (0%)
-----


Niby działa, ale nie dziala w stosunku do rangi grupy (IMG:style_emoticons/default/sad.gif)

Wszystko działa po zalogowaniu, prefix admina jest też, ale zwykly user moze zmieniac dane...

Coś nie tak w beforeRender ?

Niby działa, ale nie dziala w stosunku do rangi grupy (IMG:style_emoticons/default/sad.gif)

Wszystko działa po zalogowaniu, prefix admina jest też, ale zwykly user moze zmieniac dane...

Coś nie tak w beforeRender ?
Go to the top of the page
+Quote Post
kleus
post
Post #4





Grupa: Zarejestrowani
Postów: 93
Pomógł: 7
Dołączył: 22.10.2009
Skąd: Siędzę

Ostrzeżenie: (0%)
-----


w dokumentacji juz dalej jest wszystko ladnie wytlumaczone
http://book.cakephp.org/2.0/en/tutorials-a...ample/auth.html

Jak bedziesz dalej miec problemy to pisz
Go to the top of the page
+Quote Post
Bureau
post
Post #5





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 18.03.2012

Ostrzeżenie: (0%)
-----


No niestety przeglądałem to wiele razy i tam jest opisane jak logować i sprawdzać użytkownika, nic więcej. Zintegrowałem to z tym co mi napisałeś i działa jakoś, choć nie zastanawiałem sie nad zrozumieniem tego mechanizmu jeszcze.

Jedyny problem to taki ze nie czyta grupy uzytkownika, a przecież powinno ?
Dziwne. Myślałem że FW ułatwia programowanie, ale w tym przypadku muszę stwierdzić że nie jest to 'ułatwienie' ;/

Logowanie itp łatwo zrobić, ale nie łatwo mi zrobić panel osobny.
Zwykle w PHP jak robiłem jakiegoś koślawego CMSa to Panel miał osobny katalog o nazwie przykładowo "Admin" i zawierał sesje, był jeden użytkownik i dziękuje.

Tutaj najwidoczniej bede musiał panel admina połaczyć ze stroną, bo inaczej tego nie da się zrobić bez utraty chęci.
W każdym kontrolerze musiałbym pisać te same metody tj: admin_login, admin _wyloguj i to byłoby troche zagmatfane, nie sądzisz?

Nie da się zrobić tak, żebym miał fizycznie stworzony katalog ADMIN a w nim jeden kontroler obsługujący wszystkie dane lub coś na ten styl ? Może chociaż jeden folder ADMIN gdzie zawarłbym kolejno osobny kontroller do każdej podstrony.

Znów mnie chwyta niechęć jak chce coś zrobić a nie wiem dokładnie jak i mało osób może mi pomóc, bo nie znalazłem jeszcze tutoriala opisującego jak to zrobić.
Damn it!

edit: pomijajac fakt iz nie czyta grup uzytkownika, to przy edycji tez nie czyta parametrow przesylanych w get - dokladniej nie wie ktory id uzytkownika jest edytowany i jest pusty formularz...
jak to wykonac aby do adresu parametru dodawalo takze admin/ ?


Ten post edytował Bureau 12.04.2012, 22:03:38
Go to the top of the page
+Quote Post
kleus
post
Post #6





Grupa: Zarejestrowani
Postów: 93
Pomógł: 7
Dołączył: 22.10.2009
Skąd: Siędzę

Ostrzeżenie: (0%)
-----


AppController
  1. public $components = array(
  2. 'Auth' => array(
  3. 'authorize' => array('Controller'),
  4. ),
  5. 'Session'
  6. );
  7. public $helpers = array(
  8. 'Session', 'Form', 'Html', 'Rss', 'Text'
  9. );
  10. public function beforeFilter(){
  11. $this->Auth->allow('*');
  12. if(isset($this->params['prefix']) && $this->params['prefix'] == 'admin' && $this->Auth->user('group') != 'admin'){
  13. $this->Auth->deny('*');
  14. }
  15. }
  16. public function isAuthorized(){
  17. if(isset($this->params['prefix']) && $this->params['prefix'] == 'admin' && $this->Auth->user('group') != 'admin'){
  18. return false;
  19. }
  20. return true;
  21. }


Sprawdziłem u siebie i działa

Ten post edytował kleus 12.04.2012, 22:38:56
Go to the top of the page
+Quote Post
Bureau
post
Post #7





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 18.03.2012

Ostrzeżenie: (0%)
-----


No, działa! (IMG:style_emoticons/default/smile.gif) Jesteś moim mistrzem (IMG:style_emoticons/default/smile.gif)

Tylko czy w tym przypadku:

1. Pisząc w jednym kontrolerze UsersController.php metony z prefixem admin_, muszę w innym pisać to samo?
2. Dlaczego nie czyta mi parametru GET ? Gdy edytuje użytkownika bez ADMIN w adresie to wsio działa, a jak edytuje go pod adresem /admin/users/edit/1 to już nie ściąga getem numeru ID uzytkownika i pola sa puste. Co w tym celu musiałbym dodać do kodu ?
3. Czy naprawdę jest sens według Ciebie do stosowania tego co chce uzyskać ? Nie łatwiej, tym samym efektem robić panel admina jako stronę główną projektu z tym że jeśli ktoś nie ma rangi ADMIN to nie zobaczy linków do edycji oraz będzie bezpośredni link do edycji zastrzeżony ? Pisałem o tym wyżej.
Go to the top of the page
+Quote Post
kleus
post
Post #8





Grupa: Zarejestrowani
Postów: 93
Pomógł: 7
Dołączył: 22.10.2009
Skąd: Siędzę

Ostrzeżenie: (0%)
-----


AD 1. Nie rozumie o co pytasz? Jeżeli pytasz o to czy metody admina musza się zaczynać od admin_ to tak muszisz metody admina definiowac jako admin_costam w kazdym controller.
AD 2. nie widzac kodu nie moge ci powiedziec co jest nie tak...
AD 3. Tego to juz kompletnie nie rozumie...
Go to the top of the page
+Quote Post
Bureau
post
Post #9





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 18.03.2012

Ostrzeżenie: (0%)
-----


Co do 1 pytania to pytałem własnie o pisanie metod z przedrostkiem admin. Trochę zamuliłem bo gdybym nie robił routingu to i tak te metody add, edit, delete byłyby więc nie robi to różnicy (IMG:style_emoticons/default/smile.gif)
Mniejsza o to.

2 pytanie tez można olać bo już mi czyta, troche poprawiłem kod (IMG:style_emoticons/default/smile.gif)

Co do 3 pytanka to miałem na myśl;i porównanie dwóch sposobów przedstawienia Panelu admina.

Ten co teraz tworzę jest z routingiem itd, a ten który przedstawiaja w tutorialach na yt po prostu blokuje użytkownikowi możliwość wyświetlania elementów typu dodaj, edytuj, usun.
Chodzi mi o to iż jak zaloguje się jako admin to na stronie głównej mam link przy newsie "edytuj" -> klikam na niego i przechodzi mi do strony edycji tego newsa. Zwykły użytkownik nie miałby dostępu do sekcji edytowania i nie miałby pokazanego linku "edytuj" przy newsie.

Chciałem po prostu zapytac Ciebie, którą metode Ty byś wybrał ? Panelu zintegrowanego ze stroną, którą widzi zwykły użytkownik,a Ty gdy zalogujesz się jako admin pokazują się dodatkowe opcje czy może całkowicie osobny panel admina tak jak ja to chciałem zrobić ?
Go to the top of the page
+Quote Post
kleus
post
Post #10





Grupa: Zarejestrowani
Postów: 93
Pomógł: 7
Dołączył: 22.10.2009
Skąd: Siędzę

Ostrzeżenie: (0%)
-----


Zalezy jaki duzy projekt...
masz tylko bloga to panelu admina mozna nie robic tylko przypisac prawa do grup i ukrywac pokazywac opcje w widokach.
masz projekt na powiedzmy 200 controllers: ACL i panel dla admina (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Bureau
post
Post #11





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 18.03.2012

Ostrzeżenie: (0%)
-----


Myślę, że jeszcze dojdę do wprawy w tym frameworku, dopiero zaczynam. Nie napisałem jeszcze projektu konkretnego, a jedynie testowe aplikacje (IMG:style_emoticons/default/smile.gif)
ACL brzmi strasznie, ale tylko teraz (IMG:style_emoticons/default/smile.gif)

Dzięki wielkie za pomoc przyjacielu (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.09.2025 - 15:05