Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Savet za Login Form za korisnike sa različitim privilegijama

[es] :: PHP :: Savet za Login Form za korisnike sa različitim privilegijama

[ Pregleda: 3203 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

-Godfather-
Bez posla
Nema

Član broj: 313147
Poruke: 62



Profil

icon Savet za Login Form za korisnike sa različitim privilegijama01.07.2013. u 10:43 - pre 130 meseci
Ovako, hteo bih da se kroz istu formu loguju npr. korisnici i administratori. Interesuje me da li je bolje napraviti dve tabele jednu za korisnike, drugu za administratore, ili ih sve staviti u jednu tabelu i dodati joj jednu kolonu koja će nam govoriti da li je u pitanju korisnik ili administrator...
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama01.07.2013. u 10:56 - pre 130 meseci
Ja bi napravio jednu tabelu sa kolonama npr UserId i UserRole, gde UserRole moze da bude Admin ili User a taj UserId bi bio povezan sa UserId u koloni sa licnim podacima tog korisnika
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama01.07.2013. u 11:53 - pre 130 meseci
I mozes jos da i 'user roles' turis u zasebnu tabelu, tako bi kasnije lako mogao da prosiris listu privilegija, ako zatreba...
 
Odgovor na temu

-Godfather-
Bez posla
Nema

Član broj: 313147
Poruke: 62



Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama01.07.2013. u 12:16 - pre 130 meseci
Ok hvala, probao sam nesto al ne ide, pa ako može pomoć...
Naime, za prošlu tabelu users koja je imala kolone user_id, user_name i user_password gdje mi nisu trebale privilegije sam se logovao pomoću koda
Code:
 <?php
           .
           .
           .

if(isset($_POST['username'], $_POST['password'])){
        $username = $_POST['username'];
        $password = md5($_POST['password']);
        
        if(empty($username) or empty($password)){
            $error = 'Sva polja su obavezna!';
        } else {
            $query = $pdo->prepare("SELECT * FROM users WHERE user_name=? AND user_password=?");
            $query->bindValue(1, $username);
            $query->bindValue(2, $password);
            $query->execute();
            $num = $query->rowCount();
            
            if($num == 1){
                $_SESSION['logged_in'] = true;
                
                header('Location: index.php');
                exit();
            }else {
                $error = 'Incorect details!';
            }
        }
    }
     .
     .
     . ?>

e sad sam tabeli users dodao i kolonu user_role koja može imati vrednosti 0 za korisnika i 1 za administratora(shvatio sam da bi tu najbolje bilo 3 tabele u jednoj samo user_role u drugoj user_role i user_id i treća za username i password sa kojom ću ih povezati preko user_id, al meni sad to ne treba nego ovo što sam napravio ) i pokušavam kad mi je user_role jednako 0 da me pošalje na index.php a kad je user_role jednako 1 da me pošalje na admin.php. Dodao sam u upit
Code:
... $query = $pdo->prepare("SELECT * FROM users WHERE user_name=? AND user_password=? AND user_role=?");...

i u nastavku koda to pokušao da rešim pomoću endif al sam se zapetljao. Ako može pomoć..
 
Odgovor na temu

bantu

Član broj: 38670
Poruke: 305
87.250.105.*



+27 Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama01.07.2013. u 13:02 - pre 130 meseci
Provjeri kod, pisao sam ga onako iz glave, nije testirano.

Svoj dio ostavi kako jeste, ali dodaj još i ovu funkciju:
Code:

<?php
    public function isUserAdmin($username) {
        if (empty($_SESSION['is_admin'])) {
            $query = $pdo->prepare("SELECT * FROM users WHERE user_name=? AND user_role=1");
            $query->bindValue(1, $username);
            $query->execute();
            $num = $query->rowCount();
            
            if($num == 1){
                $_SESSION['is_admin'] = true;
                return true;
            }else {
                $_SESSION['is_admin'] = false;
                return false;
            }
        } else {
            return $_SESSION['is_admin'];
        }
    }
?>


Nakon toga imas situaciju da kad ti zatreba negdje u kodu:

Code:

if (isUserAdmin($username)) {
    onda prikazi neki dio html-a koji je namjenjen samo administratorima ili nešto slično ....
} else {
    nemoj ...
}
 
Odgovor na temu

-Godfather-
Bez posla
Nema

Član broj: 313147
Poruke: 62



Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama01.07.2013. u 15:15 - pre 130 meseci
Probao sam al nisam uspeo da iskombinujem ova dva koda. Ako ti nije problem da mi pomogneš, znači imam tabelu users sa kolonama user_id, user_name, user_password, i user_role. user_role može imati vrednost 0 (korisnik) i 1(administrator). Hoću da npr. kad se uloguje neko ko ima user_role jednako 0 da ga uputi na stranu korisnik.php a ko ima user_role jednako 1 na stranu admin.php.
 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama01.07.2013. u 20:08 - pre 130 meseci
Gledajući tvoj kod:
Code:
if(isset($_POST['username'], $_POST['password'])){
        $username = $_POST['username'];
        $password = md5($_POST['password']);
        
        if(empty($username) or empty($password)){
            $error = 'Sva polja su obavezna!';
        } else {
            $query = $pdo->prepare("SELECT * FROM users WHERE user_name=? AND user_password=? LIMIT 1");
            $query->bindValue(1, $username, PDO::PARAM_STR);
            $query->bindValue(2, $password, PDO::PARAM_STR);
            $query->execute();
            $num = $query->rowCount();
            
            if($num >= 1){
                $_SESSION['logged_in'] = true;
                
                $row = $query->fetch(PDO::FETCH_ASSOC);
                
                if ($row["user_role"]>=1) { 
                                $_SESSION["admin"] = 1;
                                header('Location: admin.php');
                                }
                else
                header('Location: index.php');
                
                exit();
                
            } else {
                $error = 'Incorect details!';
            }
        }
    }


Posle samo proveravaš sesiju $_SESSION["admin"]:
Code:
if ( isset($_SESSION["admin"]) AND $_SESSION["admin"]>=1) {
//KOD ZA ADMINE
}

I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

-Godfather-
Bez posla
Nema

Član broj: 313147
Poruke: 62



Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama01.07.2013. u 22:48 - pre 130 meseci
Hvala Ivane, meni posao odrađuje ovaj prvi dio koda. Nije mi jasno za šta će mi ovaj drugi dio, jer ako on ima user_role 1 on ga je već uputio na admin.php Nije mi jasno za šta mi tačno treba ovaj drugi dio i šta tu treba da stoji...
 
Odgovor na temu

pajaja
Beograd

Administrator
Član broj: 41598
Poruke: 3430
..f0b:1af2:d4a7:691b:913d:e66a

Jabber: pajaja@elitesecurity.org
ICQ: 253317269


+144 Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama01.07.2013. u 23:31 - pre 130 meseci
Ako ne radis proveru pri ucitavanju strane svako ko zna link ka recimo admin panelu ce imati pune privilegije, a ta login forma ce onda sluziti u principu samo za redirekciju. Prvi deo koda samo setuje promenljive za sesiju, a ti naknadno na svakoj strani na kojoj zelis da imas neku kontrolu proveravas koje su vrednosti tih promeljivih i na osnovu odredjujes cemu korisnik ima pristup.
xxx
mali mali mali kamičak...nebo plave boje.
In Memoriam: Madzone Zeka(15.09.2005-16.09.2005)
 
Odgovor na temu

Aleksandar Klickovic
Owner
Daedalus Outsourcing
Beograd

Član broj: 204183
Poruke: 344
46.240.156.*

Sajt: petsq.me


+67 Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama01.07.2013. u 23:48 - pre 130 meseci
Mali hint, ili bar kako ja radim, tj. kako sam naučio.

imam tabelu sa user-om (id, ime, prezime, ....., NIVO)

Za Top admina (superadmina) mi je nivo 0 , a za npr običnog korisnika je nivo 20 ili 30.
Tako da uvek mogu da ubacim neki nivo izmedju (npr bloger - nivo 15, obican admin, nivo 10, itd.), ukoliko se vremenom javi potreba za tim. To je obično potrebno isplanirati ako se radi neka vrsta "membership" sajta, sa više nivo-a. Kasnije ti je mnogo lakše da promeniš samo krajnjem korisniku nivo na 50, ako ubaciš nekih 10 nivoa pristupa izmedju, nego da pomeraš sve nivo-e za +1.

My 2 cents
Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
 
Odgovor na temu

-Godfather-
Bez posla
Nema

Član broj: 313147
Poruke: 62



Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama01.07.2013. u 23:50 - pre 130 meseci
Ok, hvala Pavle. Reci mi jel ovaj kod ide odmah posle ovog u nastavku, i sta tu treba da stoji, nisam bas u dobrom odnosima toliko sa PHP-om.
Hvala Aleksandre, takođe.
Recite mi imate li neki dobar sajt ili tutorijal za kreiranje jednostavnog admin panela za jednostavniji sajt.
 
Odgovor na temu

pajaja
Beograd

Administrator
Član broj: 41598
Poruke: 3430
..f0b:1af2:d4a7:691b:913d:e66a

Jabber: pajaja@elitesecurity.org
ICQ: 253317269


+144 Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama02.07.2013. u 00:01 - pre 130 meseci
Pa tesko da mozemo da ti kazemo gde ide posto ide tamo gde zelis da ga stavis :)
Zamisli da imas recimo tri dugmeta od koja administrator vidi sva tri, a korisnici samo jedno. Kod koji ce prikazivati prva dva dugmeta ces staviti unutar ovog if-a koji je ivan.a napisao, dok ce trece dugme (koje vide svi) biti van njega. Na taj nacin mozes da ogranicis sta koji nivo korisnika vidi na strani. U slucaju admin panela obicno se nalazi na samom pocetku zato sto korisnici nisu ovlasceni da mu pristupe. Isto vazi i za izvrsavanje nekog zahteva - pri obradi zahteva ako neka funkcija treba biti dostupna samo administratorima njen kod ce biti unutar ovog (ili nekog slicnog) if-a.
xxx
mali mali mali kamičak...nebo plave boje.
In Memoriam: Madzone Zeka(15.09.2005-16.09.2005)
 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
89.216.28.*



+44 Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama02.07.2013. u 06:31 - pre 130 meseci
Ako ne postaviš neku proveru za admine, svako može pristupiti stranici koja je rezervisana samo za administratore. Zato se koriste razne metode, a u ovom slučaju je to sesija. Ovo sve je već pomenuto ranije.

Ukoliko ti je potrebno više nivoa ili privilegija, neko gore je naveo primer sa nekim brojevima (od 0, 10, 20)...itd. To može da posluži, ali je generalno loša praksa.
Uvek je bolje napraviti novu tabelu ("access" ili "roles" ili "privilegije" ...) gde ćeš da upisuješ privilegije za svakog korisnika pojedinačno.

Dakle, da bi dodao (posebne) linkove za admine, primer bi bio:
Code:
if ( isset($_SESSION["admin"]) AND $_SESSION["admin"]>=1 ) {
?>
<a href="admin.php">Admin panel</a>
<?php
}


Školski primer za proveru admina...napraviš fajl provera_admina.php i dodaš:
Code:
if ( !isset($_SESSION["admin"]) ) {
   header("greska.php/?poruka=Nemate pristup"); die;
}

I jednostavno ovaj fajl "includuješ" kod svakog fajla koji je namenjen za admine - include("provera_admina.php") . Naravno, postoje i mnogo bolje metode za ovo.
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

bantu

Član broj: 38670
Poruke: 305
87.250.105.*



+27 Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama02.07.2013. u 07:20 - pre 130 meseci
Evo, a vezano za moj predhodni post:
Code:
 <?php
           .
           .
           .

if(isset($_POST['username'], $_POST['password'])){
        $username = $_POST['username'];
        $password = md5($_POST['password']);
        
        if(empty($username) or empty($password)){
            $error = 'Sva polja su obavezna!';
        } else {
            $query = $pdo->prepare("SELECT * FROM users WHERE user_name=? AND user_password=?");
            $query->bindValue(1, $username);
            $query->bindValue(2, $password);
            $query->execute();
            $num = $query->rowCount();
            
            if($num == 1){
                $_SESSION['logged_in'] = true;
                
                
                if (isUserAdmin($username)) {
                    header('Location: index.php');
                    exit();
                } else {
                    header('Location: index.php');
                    exit();
                }               
                
               
            }else {
                $error = 'Incorect details!';
            }
        }
    }
     .
     .
     . ?>

Mada se to može mnogo elegantnije riješiti sa OOP. Napraviš da ti je site single page entry, pa u tom bootstrp sekvenci kreiras neki Authenticator objekat koji ima sve metode koje su potrebne za isUserLogedIn, checkUserRoles, itd... i onda bilo gdje dalje iz koda lako pozivaš. Još ako ti je ta klasa singleton...
 
Odgovor na temu

Aleksandar Klickovic
Owner
Daedalus Outsourcing
Beograd

Član broj: 204183
Poruke: 344
46.240.154.*

Sajt: petsq.me


+67 Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama02.07.2013. u 07:36 - pre 130 meseci
Citat:
ivan.a:
...
Ukoliko ti je potrebno više nivoa ili privilegija, neko gore je naveo primer sa nekim brojevima (od 0, 10, 20)...itd. To može da posluži, ali je generalno loša praksa.
Uvek je bolje napraviti novu tabelu ("access" ili "roles" ili "privilegije" ...) gde ćeš da upisuješ privilegije za svakog korisnika pojedinačno.
...


Jel mogu ja da dobijem info što je ovo generalno loša praksa? Mislim, koja je razlika da li ima jednu kolonu više postojeća tabela ili se pravi nova tabela? U svakom slučaju su upisane privilegije za svakog korisnika pojedinačno.

(Napomena: za prikaz podataka o korisniku na sajtu, npr blogera, koristim poseban View samo sa odredjenim podacima iz te tabele, bez lozinke i nekih dodatnih polja, nego nisam hteo da mnogo skrećem sa teme)
Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
89.216.28.*



+44 Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama02.07.2013. u 08:42 - pre 130 meseci
Moguće da se nisam lepo izrazio. Možda nije loša praksa, ali postoje razna ograničenja.
Ako već hoćeš da napraviš dobar sistem za privilegije, onda ti nisu dovoljni samo brojevi (npr. user_role = 1 ili 2 ili 3 itd.). Mnogo je praktičnije upisati u novu tabelu svaku stavku posebno: npr. can_edit_posts, can_delete_posts, can_manage_users, can_edit_users, can_delete_users itd...Na taj način u kombinaciji sa OOP možeš imati istu grupu korisnika sa različitim privilegijama tj. možeš jednostavno proširiti celu priču i kasnije jednostavno filtrirati/brisati/dodavati/ažurirati privilegije bez preteranog "hard-code"-a.
Mada u principu sve zavisi od potrebe i logike programiranja.

Citat:
bantu
Mada se to može mnogo elegantnije riješiti sa OOP. Napraviš da ti je site single page entry, pa u tom bootstrp sekvenci kreiras neki Authenticator objekat koji ima sve metode koje su potrebne za isUserLogedIn, checkUserRoles, itd... i onda bilo gdje dalje iz koda lako pozivaš. Još ako ti je ta klasa singleton...

Ovo jeste fleksibilnije i praktičnije.
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

-Godfather-
Bez posla
Nema

Član broj: 313147
Poruke: 62



Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama02.07.2013. u 11:40 - pre 130 meseci
Hvala momci i na pomoći i na savetima, iz ovoga sam naučio dosta pre svega.
 
Odgovor na temu

Aleksandar Klickovic
Owner
Daedalus Outsourcing
Beograd

Član broj: 204183
Poruke: 344
46.240.154.*

Sajt: petsq.me


+67 Profil

icon Re: Savet za Login Form za korisnike sa različitim privilegijama02.07.2013. u 13:03 - pre 130 meseci
Ok, sad sam razumeo.. Da, to jeste prednost, ja sam malo izgleda previše u hard-codu, ne dam im ama baš ništa da "oni uključe ili isključe po potrebi" jer znajući kakva je većina klijenata, što manje opcija ima on da "podešava", ja manje backupa moram da radim i "odjednom ništa ne radi, samo od sebe, ništa nisam dirao" ne moram da slušam.

Pozdrav za ekipu, happy coding svima :)
Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
 
Odgovor na temu

[es] :: PHP :: Savet za Login Form za korisnike sa različitim privilegijama

[ Pregleda: 3203 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.