Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MSSQL][PHP]Niedziałający warunek sprawdzania uprawnień użytkownika
Adym
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.12.2020

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


Cześć,

Mam problem z warunkiem spawdzającym uprawnienia użytkownika do wykonania funkcji usunięcia zamówienia, który ma realizować poniższy kod:

  1. public function delete(){
  2. if($this->order_id) {
  3. if($_SESSION['user_type'] == 1 || $_SESSION['userid'] == $order['user_id']) {
  4. $stmt_A = $this->conn->prepare("
  5. DELETE FROM ".$this->orderTable."
  6. WHERE order_id = ?");
  7.  
  8. $order_id = htmlspecialchars(strip_tags($this->order_id));
  9.  
  10. $stmt_A->bind_param("i", $order_id);
  11.  
  12. if ($stmt_A->execute()) {
  13. $stmt_B = $this->conn->prepare("
  14. DELETE FROM ".$this->orderProductsTable."
  15. WHERE order_id = ?");
  16.  
  17. $stmt_B->bind_param("i", $order_id);
  18.  
  19. if ($stmt_B->execute()) {
  20. $stmt_C = $this->conn->prepare("
  21. DELETE FROM ".$this->orderRelationsTable."
  22. WHERE relation_order_id = ?");
  23.  
  24. $stmt_C->bind_param("i", $order_id);
  25. }
  26. if ($stmt_C->execute()) {
  27. return true;
  28. }
  29. }
  30. }
  31. }
  32. else {return false;}
  33. }

Na początku sprawdzam czy funkcja została "nakarmiona" numerem id zamówienia (order_id) a później czy zalogowany użytkownik jest adminem ($_SESSION['user_type'] == 1) albo czy jest autorem kasowanego zamówienia ($_SESSION['userid'] == $order['user_id']). Jeżeli któryś z tych warunków jest prawdziwy funkcja powinna przejść dalej. W moim przypadku mimo tego warunku użytkownik albo kasuje wszystko albo admin nie może kasować. Nie wiem co jest przyczyną takiego działania. Czy ktoś może mi wytłumaczyć co robię źle?

Pozdrawiam

Ten post edytował Adym 8.02.2021, 10:25:58
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cos do poprawy? Hm... wszystko?
Pomijajac fakt, ze mega mieszasz logike i odpowiedzialnosc klas, to:

nie
$order_id = htmlspecialchars(strip_tags($this->order_id));

a:
$order_id = (int) $this->order_id);
Id to liczba i jako liczba masz to przedstawiac a zadne inne bezsensowne filtrowania nie beda potrzebne.

No i czemu do jednego zapytania to zabezpieczasz a do innego juz nie?
Czemu w jednym bindujesz a w innym juz walisz jako string?

nie ==
a ===

Jak juz zwracasz TRUE gdy sie powiedzie, to badz konsekwentny i zwracaj FALSE gdy sie nie powiedzie
Go to the top of the page
+Quote Post

Posty w temacie


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: 15.10.2025 - 04:23