1

Temat: Logowanie/ podział na grupy

Witam, zaczynam dopiero zabawe z frameworkiem cakePHP, za pomocą którego chce stworzyc aplikacje webowa (mały CRM). Napotkałem sie na pewien problem:

http://book.cakephp.org/view/172/Authentication

Na powyzszej stronie jest opisany sposob tworzenia systemu logowania i autentykacji w cake. W mojej bazie chcialem zrobic to troche inaczej i stad moje pytanie. W bazie mam takie tabele: users, workers, clients. Workers i clients dziedzicza po users. W workers chce miec pola login i password natomiast clients bez mozliwosci logowania, poniewaz klienci beda mogli jedynie przegladac niektore rzeczy. Mozna jakos przydzielac prawa niezalogowanym klientom?

Nie chce tworzyc users i groups jak w tym tutorialu bo w users musialbym wtedy miec wszystkie pola jakie posiada worker oraz client.

2

Odp: Logowanie/ podział na grupy

Troche nie zwiazane z tematem, ale mozes wkleic strukture wszytskich 3 tabel ?
Noi  jeszcze jedno Auth ... sluzy do autentykacji ( czyli obslugi logowania sie userow) , do nadawania praw  itp dluzy ACL

Ostatnio edytowany przez robal77 (2009-04-22 23:53:27)

3

Odp: Logowanie/ podział na grupy

To ja tez nie z tematem...

Uzywasz tego Auth? Warto? Ja stosuje stare sprawdzone sprawdzanie Session->check('User.id'). Ten auth ma jakies inne, fajne zastosowanie?

4

Odp: Logowanie/ podział na grupy

Users (id, imie, nazwisko, telefon)

Clients (id, user_id, wojewodztwo, miasto, ulica, kod_poczt)

Workers (id, user_id, login, haslo, grupa, pensja)

Mniej wiecej ma to tak wygladac. Glownie chodzi o to ze logowac moga sie jedynie workers. Clients moga bez logowania przegladac niektore czesci systemu i dodatkowo ze wzgledu na pole grupa w tabeli workers beda rozne prawa dla pracownikow (np. grupa admin, grupa menedzer). Da sie to zrealizowac w cake'u?

Btw: Zainstalowalem do cakephp srodowisko Komodo z rozszerzeniem do podpowiadania funkcji w kodzie. Warto sie tego trzymac czy moze jest jakies inne narzedzie?

Ostatnio edytowany przez carlin (2009-04-23 12:28:51)

5

Odp: Logowanie/ podział na grupy

1. czyli nie workres tylko emplyees wink Jakos nie moglem skumac o co loto wink
2. Ja bym nie trzymal ze wzgledow bezpieczenstwa klentow i pracownikow w tej samej tebeli
3. jezeli jednak musisz

Users (id, user_role, imie, nazwisko, telefon) - user_role - pole enum z wartowciami ("client","employee');
Clients (id, user_id, wojewodztwo, miasto, ulica, kod_poczt)
Workers (id, user_id, login, haslo, group_id, pensja)

UserGroups( id, nazwa) - do uzycia z ACL'em o ile bedziesz chcial tworzyc jakies nowe grupy, jezeli nie to mozesz zamiast group_id uzyc kolenego pola enum.

Do wybierania uzytkownikow poszczegolnych grup uzyj ebhaviora contanable z odpowiednim warunkiem (poponuje spojrzec w book'a i poexperymentowac z containable). Lub poprostu odwoluj sie od razu do odpowiedniej tabeli podczas proby logowania.

Co do komodo, kwestia gustu ... sam nie uzywalem nigdy bo to nie open source, wole eclipse z pdt, net beansy z oblusga php, a ostatnio mi do gustu przypadla aptana.

6

Odp: Logowanie/ podział na grupy

robal77 jest mozliwosc skontaktowania sie z Toba na gg? Chcialem zadac kilka pytan jesli mozna oczywiscie. Pozdrawiam

7

Odp: Logowanie/ podział na grupy

carlin ... na gg nie bardzo ... napisz na marcin2828 [....malpa .....] ..... gmail ..... [kropka] com postaram sie odpowiedziec w miare szybko.

8

Odp: Logowanie/ podział na grupy

ok napisalem na maila

9

Odp: Logowanie/ podział na grupy

stworzylem takie tabele w bazie jak polecil robal77:

Users (id, user_role, imie, nazwisko, telefon) - user_role - pole enum z wartosciami ('client','employee');
Clients (id, user_id, wojewodztwo, miasto, ulica, kod_poczt)
Employees (id, user_id, login, haslo, grupa, pensja) - grupa - pole enum z wartosciami ('handlowiec', 'menedzer', 'admin').

Nie wiem jak teraz zrobic dobrze logowanie oraz uprawnienia. Prosilbym o bardziej szczegolowa podpowiedz jak mam to ugryzc, od czego zaczac. Jak to zrealizowac uzywajac tych pol enum tak aby client mogl przegladac niektore rzeczy (czyli mial nadane jakies uprawnienia)oraz employee w zaleznosci od grupy rowniez posiadal rozne uprawnienia? Czytalem troche na stronie cakephp ale nie rozgryzlem tego jeszcze dlatego potrzebuje wskazowek.

Mam jeszcze takie pytania:

1. w kontrolerze usera mam taka funkcje:

    function add() {
        if (!empty($this->data)) {
            if ( $this->User->save($this->data)) {
                $this->Session->setFlash('Dodano uzytkownika.');
                $this->redirect(array('action' => 'index'));
            }
        }
    }

Po dodaniu uzytkownika wraca do index ale nie wyswietla komunikatu w setFlash.


2. employee dziedziczy po user. Chcialem w funkcji add w kontrolerze employee poza polami z tabeli employee dodawac tez te z user jak np.Imie:

    printf ($form->input('Imie', array('type' => 'text');

Jak zrobic zeby widzial pola z rodzica-user bo takie cos wywala blad.

3. Mam najnowsza wersje cakephp z oficjalnej strony ale nie posiadam folderu console i nie moge uruchomic konsoli cake-owej jak to jest pokazane w booku. Mozna to doinstalowac?

robal77 nie moze mi w tej chwili pomoc z pewnych powodow, ktore sa zrozumiale ale moze jest ktos na forum kto udzieli mi pomocy. Bede wdzieczny.

10

Odp: Logowanie/ podział na grupy

$form->input('User.imie', array(
     'type' => 'text',
     'label' => 'Imię:'
    )
)

11

Odp: Logowanie/ podział na grupy

printf ($form->create('Employee'));
    printf ($form->input('User.Imie', array('type' => 'text', 'label' => 'Imie:')));
    printf ($form->input('User.Nazwisko', array('type' => 'text','label' => 'Nazwisko:')));
    printf ($form->input('User.Telefon', array('type' => 'text','label' => 'Telefon:')));
    printf ($form->input('User.user_role', array('type' => 'text','label' => 'Rola:')));

    printf ($form->input('Employee.Login', array('type' => 'text','label' => 'Login:')));
    printf ($form->input('Employee.Haslo', array('type' => 'password','label' => 'Haslo:')));
    printf ($form->input('Employee.Grupa', array('type' => 'text','label' => 'Grupa:')));
    printf ($form->input('Employee.Pensja', array('type' => 'text','label' => 'Pesel:')));
     
    printf ($form->end('Dodaj'));

Taki kod mam w views/employees/add.ctp i dodaje mi do bazy tylko employee a powinien jeszcze dodawac usera z takim samym id jak pole user_id w employee.

12

Odp: Logowanie/ podział na grupy

Hmm na moje oko powinno. Moze chodzi o .... (ja zawsze tak robie wiec nie wiem czy inaczej tez mozna)

1) uzywam echo zamiast printf (to akurat pewnie nie ma znaczenia)
2) nazywam dokadnie tak samo jak kolumny czyli User.imie a nie User.Imie
3) sprawdz powiazania w modelu employees

Podpowiedz:
wyswietl sobie efekt zapytania &this->Employee->find('all') i w ten sam sposob stwórz 'tabele'  ktora wysylasz formularzem. Tzn po wyswietleniu print_r($_POST) ma sie pokazac ta sama struktura.

13

Odp: Logowanie/ podział na grupy

nazwy sa dokladnie takie same. 'Imie' w bazie oraz w kodzie z duzej litery. Moze trzeba skorzystac z dziedziczenia jak w tym artykule?

http://bakery.cakephp.org/articles/view … s-behavior

14

Odp: Logowanie/ podział na grupy

ok problem z folderem console rozwiazany. Jednak nadal mam problem z dodawaniem usera gdy dodaje employee.

Tak wygladaja modele:

class User extends AppModel {

    var $name = 'User';
    var $hasOne = array(
        'Employee' => array(
        'className' => 'Employee',
        'dependent' => true,
                )
         );
}

-----------------------------------------

class Employee extends AppModel {

var $name = 'Employee';
var $belongsTo = array(
     'User' => array(
     'className' => 'User',
        )
      );
}

3 posty wczesniej zamiescilem kod, ktory mam w views/employees/add.ctp i dodaje mi do bazy tylko employee a powinien jeszcze dodawac usera.

Sprawdzam w phpMyAdmin i inkrementuje mi za kazdym razem id w employee ale user_id jest zawsze 0

Prosze o pomoc.

15

Odp: Logowanie/ podział na grupy

nie powinno byc hasMany zamiast hasOne?

Ja oprocz takiego triku co sam stosuje Ci wiecej nie pomoge chyba;/

Employee->saveAll na tabeli takiej samej jaka powstaje z Emplyee->find('all') u mnie dziala sad

16

Odp: Logowanie/ podział na grupy

hasMany to oznaczaloby ze jeden user np. Lech K. to wielu pracownikow czyli zle, musi byc hasOne. Jeden czlowiek to jeden pracownik.

W takim razie czekam na podpowiedz innych moze ktos wie w czym tkwi problem.

17

Odp: Logowanie/ podział na grupy

A uzywasz saveAll czy save? I czy tabele pasują do siebie? pr(find('all')) == pr($_POST) ??

Jak tak to juz nie pomoge raczej ale jak mozesz to wklej te dwa wyniki z pr();

18

Odp: Logowanie/ podział na grupy

ok problem z dodawaniem pracowników/userów rozwiazany. Dzieki duke_piotr, zalamalem sie...mialem w funkcji add:

$this->Employee->save($this->data) zamiast saveAll <sciana>.

Pora zajac sie logowaniem i prawami jak cos to znowu bede pytal big_smile