[PHP]-Uprawnienia na wyświetlanie informacji


(jakub888) #1

Witam!

Posiadam system logowania rejestracji itd.. zrobiłem też system newsów ale nie wiem jak zrobić aby tylko użytkownik któremu nadam uprawninia do przeczytania danego newsa. Wiadomo można zoribć tabele itd ale problem zaczyna się wtedy kiedy chcę aby mógł zobaczyć kolejny ale już nowszy.


(Konrad Kosowski) #2

Nie bardzo zrozumiałem… Jeśli jakoś logujesz użytkowników, to można im nadać “flagę” i zalterować bazę z newsami, tak, żeby dodać nową kolumnę, na przykład require_flag. Zmieniasz zapytanie do bazy tak, żeby select dodatkowo sprawdzał flagę usera. I po wszystkiemu…


(jakub888) #3

Ale nie bardzo wiem jak to zrobić …


(Konrad Kosowski) #4

Ja też nie… wszystko zależy od tego, jak masz skonstruowaną aplikację…

Załóżmy, że masz taką tablicę z newsami:

ID | title | bod | date | author

Musisz ją zalterować tak:

ALTER TABLE `news` ADD COLUMN `login_require` TINYINT(1) NULL DEFAULT 0 AFTER `author` ;

Teraz po zalogowaniu użytkownika tworzysz (mam nadzieję) sesję tego usera. Dodaj sobie do sesji flagę is_logged:

$_SESSION['is_logged'] = TRUE;
 [/code]




W kodzie musisz mieć metodę, która pobiera newsy. Załóżmy, że wygląda tak:

[code=php]function get_news() {$sql = “select * from news”;$result = mysql_query($sql); foreach(mysql_fetch_array($result) as $row) { $news[] = $row; }return $news; }
Trzeba go zmienić na następujący:

function get_news()
{
if($_SESSION['is_logged'])
{
$sql = "select * from news";
}
else
{
$sql = "select * from news where `login_require` = 0";
}
$result = mysql_query($sql);
foreach(mysql_fetch_array($result) as $row)
{
 $news[] = $row;
}
return $news;
}
[/code]

Teraz musisz sobie jeszcze przemyśleć jak będziesz nadawał flagę login_require w bazie. Szkoda, że nie powiedziałeś, w czym programujesz i jakiej używasz bazy.


(jakub888) #5

Używam PHP5(z apache2) i bazy MySQL (z phpmyadmin)

A tu kod dodawania newsa:

<?php session_start(); include('header.php'); ?>

<?php if(empty($_COOKIE[‘islogged’])) { header(‘Refresh: 2; url=login.php’); die(‘Aby skorzystać z panelu należy się zalogować! Za chwilę nastąpi przekierowanie’); } if(isset($_SESSION[‘nick’]) && isset($_SESSION[‘ip’])) { if(($_SESSION[‘ranga’]) == ‘Member’){ echo ’ Nie masz uprawnień!’; } if(($_SESSION[‘ranga’]) == ‘Admin’){ include(‘connect.php’); $editor = ‘editor1’; echo’

Dodawanie Pluginu

Tytuł: Opis: Link do pobrania pluginu: ‘; $name = $_POST[‘tytul’]; $con = $_POST[‘editor1’]; $link = $_POST[‘link’]; $autor = $_SESSION[‘nick’]; if($_SERVER[‘REQUEST_METHOD’] == ‘POST’ && isset($_POST)) { $query = mysql_query("insert into news values(’’,’".$_POST[‘tytul’]."’,now(),’".$_SESSION[‘nick’]."’,’".$_POST[‘editor1’]."’, ‘". $_POST[‘link’] ."’);"); $usr_perm = mysql_query(";"); echo’ Plugin dodany Poprawnie!’; header(‘Refresh: 2; url=panel.php’); } } } ?>
<?php include(‘footer.php’);?>[/code] Wyświetlania Newsa:

[code]<?php session_start(); ?> <?php include(‘header.php’); ?>
<?php include(“connect.php”); $query = mysql_query(“select * from news where id=’”.(int)$_GET[‘id’]."’"); // 1 $rekord = mysql_fetch_array($query); echo ’

‘.$rekord[1].’

Autor: ‘.$rekord[3].’ Data: ‘.$rekord[2].’ ‘.$rekord[4].’’.’ Link do pobrania pluginu:’. $rekord[5] .’’; // 2 ?>
<?php include(‘footer.php’); ?>
I Logowania:

<?php

include('header.php');

ob_start();

?>

<?php if($_SERVER[‘REQUEST_METHOD’] == ‘POST’ && isset($_POST)) { // Drobne zapezpieczenie. Sprawdza czy metoda którą wysyłane jest żadanie to POST $login = $_POST[‘login’]; $password = $_POST[‘password’]; if(empty($login) || empty($password)) // Sprawdzanie czy pola formularza nie są puste { die(’ Wypełnij wszystkie dane.’); } else { include_once(‘config.php’); $mysqli = new mysqli($db[‘host’], $db[‘login’], $db[‘pas’], $db[‘db’]); if($mysqli -> connect_error) die(’ Problem z połączeniem się z bazą danych:’.$mysqli -> connect_error.’[’.$mysqli -> connect_errno.’]’); $login = trim(htmlspecialchars($mysqli -> real_escape_string($login))); $password = md5(trim(htmlspecialchars($mysqli -> real_escape_string($password)))); $result = $mysqli -> query(“SELECT * FROM user WHERE login = ‘$login’ and password = ‘$password’”); if($result -> num_rows == 1) { session_start(); // Inicjacja sesji $row = $result -> fetch_row(); $_SESSION[‘id’] = $row[0]; $_SESSION[‘nick’] = $row[1]; $_SESSION[‘password’] = $row[2]; $_SESSION[‘mail’] = $row[3]; $_SESSION[‘data’] = $row[4]; $_SESSION[‘ip’] = $row[5]; $_SESSION[‘ranga’] = $row[6]; setcookie(‘islogged’, ‘islogged’, time() + 3600); // czas istenienia ciastka 3600s czyli 1h header(‘Refresh: 2; url=panel.php’); echo’ Zalogowano Pomyślnie!’; } else { echo ’ Brak podanego użytkownika w bazie.’; } } } ?>
<?php include(‘footer.php’); ob_end_flush(); ?> [/code]

A tak wygląda daza danych: http://scr.hu/13cz/zze2s

i http://scr.hu/13cz/p0aeb


(Konrad Kosowski) #6

No to byłem bardzo blisko.

Alter:

ALTER TABLE `news` ADD COLUMN `login_require` TINYINT(1) NULL DEFAULT 0 AFTER `link`

Logowanie:

(...)
$_SESSION['id']   = $row[0];
$_SESSION['nick'] = $row[1];
$_SESSION['password'] = $row[2];
$_SESSION['mail'] = $row[3];
$_SESSION['data'] = $row[4];
$_SESSION['ip']   = $row[5];
$_SESSION['ranga']   = $row[6];
$_SESSION['is_logged'] = TRUE;
setcookie('islogged', 'islogged', time() + 3600); // czas istenienia ciastka 3600s czyli 1h
(...)
 [/code]






Wyświetlanie newsa:

[code=php]$query = mysql_query(“select * from news where id=’”.(int)$_GET[‘id’]."’"); // 1$rekord = mysql_fetch_array($query); if(!$_SESSION[‘is_logged’] && $rekord[‘login_require’] == 1) { echo ‘Nic tu dla ciebie nie ma’; } else { echo ’

.$rekord[1].‘Autor: ‘.$rekord[3].’ Data: ‘.$rekord[2].’’.$rekord[4].’’.‘Link do pobrania pluginu:. $rekord[5] .’">’. $rekord[5] .’’; }  
Dodawanie newsa:

    <?php session_start(); include('header.php'); ?>

    <?php        if(empty($_COOKIE[‘islogged’]))        {          header(‘Refresh: 2; url=login.php’);          die(‘Aby skorzystać z panelu należy się zalogować! Za chwilę nastąpi przekierowanie’);        }        if(isset($_SESSION[‘nick’]) && isset($_SESSION[‘ip’]))        {           if(($_SESSION[‘ranga’]) == ‘Member’){              echo ‘Nie masz uprawnień!’;           }           if(($_SESSION[‘ranga’]) == ‘Admin’){           include(‘connect.php’);              $editor = ‘editor1’;              echo’

Dodawanie Pluginu

                Tytuł:                  Login wymagany: Nie  Tak                  Opis:                  .$editor.’")                                   Link do pobrania pluginu:                                  ‘;                 $name = $_POST[‘tytul’];                 $con = $_POST[‘editor1’];                 $link = $_POST[‘link’];                 $autor = $_SESSION[‘nick’];                 $login_require = $_POST[‘login_require’];              if($_SERVER[‘REQUEST_METHOD’] == ‘POST’ && isset($_POST)) {                 $query = mysql_query("insert into news values(’’,’".$_POST[‘tytul’]."’,now(),’".$_SESSION[‘nick’]."’,’".$_POST[‘editor1’]."’, ‘". $_POST[‘link’] ."’, ‘". $login_require ."’);");                 $usr_perm = mysql_query(";");                 echo’Plugin dodany Poprawnie!’;                  header(‘Refresh: 2; url=panel.php’);              }           }        }     ?>    
    <?php include(‘footer.php’);?>[/code]

W tym ostatnim bezsensu przypisujesz zmiennym wartości z tablicy post. Później ich nie wykorzystujesz.


(jakub888) #7

bardzo dziękuję za pomoc teraz wszystko śmiga jak należy :smiley: