Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Rangi + dostęp
Deotho
post 14.05.2012, 08:49:33
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 2.05.2012
Skąd: Hogwart

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


Witam,
chciałbym zrobić system rang + dostępu.

Administrator - Panel administratora, panel moderatora - rank = 2
Moderator - Panel moderatora, brak dostępu do panelu administratora - rank = 1
Użytkownik - brak dostępu do PA i PM - rank = 0

Jak mogę coś takiego stworzyć?
Prosiłbym, aby ktoś mnie naprowadził, bo nie wiem jak zacząć.

Ten post edytował Deotho 14.05.2012, 08:49:55
Go to the top of the page
+Quote Post
Tajgeer
post 14.05.2012, 08:54:26
Post #2





Grupa: Zarejestrowani
Postów: 290
Pomógł: 48
Dołączył: 11.05.2008
Skąd: Kielce

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


Osobna tabela na rangi (grupy) i osobna na uprawnienia (chyba, że nie przewidujesz zbyt dużej ilości uprawnien, to możesz zrobić wszystko razem w tabeli z rangami). Później w tabeli użytkowników tworzysz nowe pole, które będzie wskazywać na odpowiednią rangę i potem sprawdzasz tylko uprawnienia.

Jeśli wszystko ma się ograniczyć tylko do tego, co przedstawiłeś powyżej (czyt. dostęp do PA lub PM), to bez zbędnych kombinacji - nowe pole w tabeli użytkowników (np. user_rank), które może przyjmować wartości 0, 1, 2 i odpowiednio sprawdzasz w skrypcie.

Ten post edytował Tajgeer 14.05.2012, 08:58:00
Go to the top of the page
+Quote Post
Deotho
post 14.05.2012, 11:42:54
Post #3





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 2.05.2012
Skąd: Hogwart

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


Próbuje napisać panel administratora no i mam mały problem z funkcją sprawdzającą.

W tabeli users stworzyłem pole rank:

Administrator = 1
Użytkownik = 0

W login.php dodałem:
  1. $rank = $_POST['rank'];
  2. $db1 = mysql_query("SELECT * FROM users WHERE rank='".$rank."'");
  3. $info = mysql_fetch_array($db1);


Tak to wygląda w całości:
  1. <?php
  2. include ("config/db.php");
  3. IF(isset($_SESSION['login'])) {header('Location: index.php'); }
  4.  
  5. if ($_POST['login']) {
  6. $login = addslashes($_POST['login']);
  7. $haslo = md5($_POST['haslo']);
  8. $rank = $_POST['rank'];
  9.  
  10. $db = mysql_query("SELECT * FROM users WHERE login='".$login."' and haslo='".$haslo."'");
  11. $db1 = mysql_query("SELECT * FROM users WHERE rank='".$rank."'");
  12.  
  13. if (mysql_num_rows($db) == 1) {
  14. $info = mysql_fetch_array($db);
  15. $info = mysql_fetch_array($db1);
  16. if ($info['active'] == 0) {
  17. header('Location: index.php?active=0');
  18. }
  19. if ($info['active'] == 1) {
  20. $_SESSION["login"] = $info["login"];
  21. header('Location: index.php ');
  22. }
  23. } else {
  24. echo '<html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type" /></head><body><span class="blad">Podane dane są nieprawidłowe!</span><br><a href="index.php">Strona Główna</a></body></html>';
  25. }
  26. }
  27.  
  28.  
  29. if ($_GET["wylogowanie"] == "tak") {
  30. header('Location: index.php');
  31. }
  32.  
  33. ?>


Teraz w admin.php dodałem:
  1. if ((isset($_GET["rank"])) && ($_GET["rank"]=="0")) {
  2. echo '<span class="blad">Nie posiadasz uprawnień administratora.</span>';
  3. }


Nadałem sobie uprawnienia użytkownika i mogę nadal wchodzić do panelu. :/
Go to the top of the page
+Quote Post
Dominator
post 14.05.2012, 11:54:33
Post #4





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Dla mnie najlepszą metodą jest dawanie rangi do sesji. Czyli tworzysz sobie w MySQL tabelkę, a w niej piszesz "ranga". Następnie gdy ktoś się loguje to skrypt sprawdza czy w tabelce "ranga" jest 0,1 bądź 2. Jeśli jest 0 to zwykła sesja, jeśli jest 1 to sesja moda, jeśli jest 2 to sesja admina.

I potem w pliku:

  1. (...)
  2. if($_SESSION["user"] == 0(wyciągnięta zmienna z bazy "ranga"))
  3. {
  4. include("user.php");
  5. }
  6. if($_SESSION["user"] == 1(wyciągnięta zmienna z bazy "ranga"))
  7. {
  8. include("modcp.php");
  9. }
  10. if($_SESSION["user"] == 2(wyciągnięta zmienna z bazy "ranga"))
  11. {
  12. include("admin.php");
  13. }
  14. (...)


Ten post edytował Dominator 14.05.2012, 11:56:14
Go to the top of the page
+Quote Post
Deotho
post 14.05.2012, 14:11:55
Post #5





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 2.05.2012
Skąd: Hogwart

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


Hmm nie wiem czy dobrze zrozumiałem.
Skoro mam już w tabelce users pole rank, a w nim wpisane 0 - użytkownik, 1 - admin, 2 - mod
Teraz wystarczy, że dodam np. do admin.php sesję z adminem i jeśli jest ok to wyświetla zawartość?

Przykładowo mój plik admin.php
  1. <?php
  2. include('config/db.php');
  3. include('templates/header.php');
  4. ?>
  5.  
  6.  
  7.  
  8. <?php include('templates/footer.php'); ?>


Dodaję do niego sesję:

  1. <?php
  2. include('config/db.php');
  3. include('templates/header.php');
  4. if($_SESSION["rank"] == 1) {
  5. echo "Nie posiadasz praw administratora.";
  6. } else {
  7. echo "Jesteś zalogowany jako administrator.";
  8. }
  9. ?>
  10.  
  11.  
  12.  
  13. <?php include('templates/footer.php'); ?>


Ten post edytował Deotho 14.05.2012, 14:12:18
Go to the top of the page
+Quote Post
Dominator
post 14.05.2012, 14:19:54
Post #6





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


  1. $sql = "SELECT * FROM users WHERE login='$login'";
  2. $wykonaj = mysql_query($sql) or die(mysql_error());
  3.  
  4. $dane = mysql_fetch_assoc($wykonaj);
  5.  
  6. // tu walidacja danych...
  7.  
  8. //tu jeśli wszystko dobrze poszło
  9.  
  10. if($login == $dane['login'] && $haslo == $dane['haslo'])
  11. {
  12. $_SESSION["user"] = $dane['rank']; //jeśli dla danego usera "rank" jest 1 to jest modem, jak 2 to adminem, jak 0 to zwykły user...
  13. }
  14.  


Rób coś w ten deseń smile.gif Nie sprawdzałem ...


Potem sobie wykorzystaj 2 posty wyżej podany przeze mnie kod wink.gif

Ten post edytował Dominator 14.05.2012, 14:21:25
Go to the top of the page
+Quote Post
Deotho
post 14.05.2012, 14:46:43
Post #7





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 2.05.2012
Skąd: Hogwart

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


login.php
  1. <?php
  2. include ("config/db.php");
  3. IF(isset($_SESSION['login'])) {header('Location: index.php'); }
  4.  
  5. if ($_POST['login']) {
  6. $login = addslashes($_POST['login']);
  7. $haslo = md5($_POST['haslo']);
  8.  
  9. $sql = "SELECT * FROM users WHERE login='$login'";
  10. $wykonaj = mysql_query($sql) or die(mysql_error());
  11. $dane = mysql_fetch_assoc($wykonaj);
  12.  
  13. if($login == $dane['login'] && $haslo == $dane['haslo']) {
  14. $_SESSION["user"] = $dane['rank'];
  15. }
  16.  
  17.  
  18. $db = mysql_query("SELECT * FROM users WHERE login='".$login."' and haslo='".$haslo."'");
  19.  
  20. if (mysql_num_rows($db) == 1) {
  21. $info = mysql_fetch_array($db);
  22. if ($info['active'] == 0) {
  23. header('Location: index.php?active=0');
  24. }
  25. if ($info['active'] == 1) {
  26. $_SESSION["login"] = $info["login"];
  27. header('Location: index.php ');
  28. }
  29. } else {
  30. echo '<html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type" /></head><body><span class="blad">Podane dane są nieprawidłowe!</span><br><a href="index.php">Strona Główna</a></body></html>';
  31. }
  32. }
  33.  
  34.  
  35. if ($_GET["wylogowanie"] == "tak") {
  36. header('Location: index.php');
  37. }
  38.  
  39. ?>


admin.php
  1. <?php
  2. include('config/db.php');
  3. include('templates/header.php');
  4. if ($_SESSION["user"] == 1) {
  5. echo ' Witaj w panelu administratora. ';
  6. } else {
  7. echo '<center>Nie masz dostępu do panelu administratora.</center>';
  8. }
  9. ?>
  10.  
  11.  
  12.  
  13. <?php include('templates/footer.php'); ?>


Nadałem sobie uprawnienia = o czyli użytkownik i powinno wyświetlać, że nie mam dostępu do panelu administratora - no i wyświetla, ale jak nadam sobie uprawnienia = 1 to jestem adminem i powinno wyświetlać Witaj w panelu, a wyświetla, że nie mam uprawnień. Coś źle zrobiłem ?

questionmark.gif
Go to the top of the page
+Quote Post
Dominator
post 14.05.2012, 14:55:39
Post #8





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Podczas logowania do panelu admina napisz (w tym momencie, gdy dane się zgadzają)

  1. $_SESSION["admin"] = 1;
Go to the top of the page
+Quote Post
Deotho
post 14.05.2012, 14:57:40
Post #9





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 2.05.2012
Skąd: Hogwart

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


Nie mam logowania do panelu administratora.
Mam zwykłe logowanie, a w nim ten kod od sesji Twój.
Gdy jestem zalogowany z uprawnieniami = 0 powinno wyskawiwać brak dostępu.
Gdy jestem zalogowany z uprawnieniami = 1 powinno wyskakiwać Witaj w panelu.

Go to the top of the page
+Quote Post
Dominator
post 14.05.2012, 15:07:14
Post #10





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Dobra, napiszę to od nowa.

Mamy sobie kolumnę users, a w niej tabelki: login, haslo, rank (Dominator, haselko1234, 1)

Logowanie.php

  1. <form action="index.php" method="POST">
  2. Login:<input type="text" name="login">
  3. <br>
  4. Hasło:<input type="password" name="haslo">
  5. <br>
  6. <input type="submit" name="przeslij">
  7.  
  8. <?php
  9.  
  10. if(isSet($_POST["przeslij"]))
  11. {
  12. $login = $_POST["login"];
  13. $haslo = $_POST["haslo"];
  14. $sql = mysql_query("SELECT * FROM users WHERE login='$login'") or die("Błąd 1". mysql_error());
  15. $dane = mysql_fetch_assoc($sql);
  16.  
  17. if($login == $dane["login"] && $haslo == $dane["haslo"])
  18. {
  19. $_SESSION["rank"] = $dane["rank"];
  20. header("Location: admin.php");
  21. }
  22. else
  23. {
  24. echo "Złe dane";
  25. }
  26. }
  27.  
  28. ?>
  29.  


Admin.php

  1. <?php
  2.  
  3. if($_SESSION["rank"] == 0)
  4. {
  5. echo "ZWYKŁY USER";
  6. }
  7. if($_SESSION["rank"] == 1)
  8. {
  9. echo "MODERATOR";
  10. }
  11. if($_SESSION["rank"] == 2)
  12. {
  13. echo "ADMIN";
  14. }
  15.  
  16. ?>
Go to the top of the page
+Quote Post
Deotho
post 14.05.2012, 18:17:27
Post #11





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 2.05.2012
Skąd: Hogwart

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


Tak tylko mi nie o to chodzi. Chcę, aby po prostu ktoś z uprawnieniami = 1 miał dostęp do panelu, a nie edytować cały kod.
Musi się dać to inaczej zrobić, bo widziałem już to w podobnym skrypcie i coś robili na wzór:
  1. if ( isset($_GET['action']) && $_SESSION['nazwa'] !== NULL && $userdata['user_level'] == 1 && htmlspecialchars($_GET['action']) == 'panel_admina' )
  2. {
  3. echo "Witaj w panelu admina";
  4. }
  5. else if ( isset($_GET['action']) && $_SESSION['nazwa'] !== NULL && $userdata['user_level'] !== 1 && htmlspecialchars($_GET['action']) == 'panel_admina' )
  6. {
  7. echo "Nie posiadasz praw admina!";
  8. }


Tylko nie wiem za bardzo jak.

questionmark.gif
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 06:37