no np tak, bierzesz sobie nowy plik i includujesz go wszędzie po wyjęciu danych sesji:
Kopiuj
<?php
define('MOZE_PIERWSZA_STRONE', 1);
define('MOZE_DRUGA_STRONE', 2);
define('MOVE_TRZECIA_I_CZWARTA_STRONE', 4);
$page_min_prvs = Array(
'/strona1.php' => MOZE_PIERWSZA_STRONE,
'/strona2.php' => MOZE_DRUGA_STRONE,
'/strona3.php' => MOVE_TRZECIA_I_CZWARTA_STRONE,
'/strona4.php' => MOVE_TRZECIA_I_CZWARTA_STRONE
);
define('this_page', strtolower($_SERVER['SCRIPT_NAME']));
function can_access($page){
$page = strtolower($page);
$have = is_empty($_SESSION['privileges']) ? 0 : intval($_SESSION['privileges'];
$need = in_array($page, $page_min_prvs) ? $page_min_prvs[$page] : 0;
return ($have & $need) == $need;
}
if(!can_access(this_page){
Header('Status: 403 Forbidden');
Die();
}
?>
przy logowaniu pobrać wartość pola z bazy do $_SESSION['privileges'] (najlepiej na każdej podstronie)
na stronie przy generowaniu linków:
Kopiuj
<?php
function linkto($page, $an){
return can_access($page) ? '<a href="' . $page . '">' . $an . '</a><br />' : '';
}
?>
<?= linkto('/strona1.php', 'Link do pierwszej strony') ?>
<?= linkto('/strona2.php', 'Link do drugiej strony') ?>
<?= linkto('/strona3.php', 'Link do trzeciej strony') ?>
<?= linkto('/strona4.php', 'Link do czwartej strony') ?>
<?php
if(can_access('/fotka.jpg'))
echo '<img src="fotka.jpg" />';
?>
a panel admina przy przypisywaniu mógłby wyglądać np tak:
Kopiuj
<?php
$prvls = Array();
foreach($page_min_prvs as $strona => $prvl)
$prvls[$prvl][] = $strona;
foreach($prvls as $prvl){
?>
<label><input name="przywilej[]" value="<?= $prvl ?>" type="checkbox"><?php
foreach($prvl as $strona)
echo $strona . '; ';
?></label><br /><?php
}
?>
a zapisanie:
Kopiuj
<?php
$new_prvls = 0;
foreach($_POST['przywilej'] as $prvl)
$new_prvls |= intval($prvl);
mysql_query('UPDATE usery SET przywileje = ' . $new_prvls . ' WHERE id = ' . $id);
?>
to jest wszystko taki pseudokodowy zarys a poza tym przy liczbie 32 bitowej może zabezpieczyć tylko 32 strony ;P ale gdyby przetrzymywać uprawnienia każdemu w większej liczbie albo np w kilku liczbach to by było więcej, albo jako tekst i już nie ma problemu
pisałeś że sztywna lista plików ręcznie uaktalniana to hardcorowe rozwiązanie więc możesz trochę przerobić i na początku pliku każdego napisać jaki przywilej mu jest potrzebny ale wtedy w innych plikach byś musiał otwierać ten plik i odczytać te dane, bo inaczej nie wiadomo czy wyświetlić do tego pliku linka - poza tym musisz pamiętać ostatnią liczbę uprawnień żeby nie nadać tego samego więc po długim czasie jakbyś zapomniał i chciał dodać nowy plik to byś musiał przejrzeć wszystkie pliki jakie miały już uprawnienia - dla mnie to jest bardziej hardcorowe rozwiązanie
czemu w sesji niebezpiecznie ? nieuprawniony user może zmienić dane w sesji tak samo jak w bazie danych czyli jeśli ani w skrypcie ani w serwerze nie ma dziury to nijak
// a jak userów "uprawnionych" jest bardzo mało to możesz zrobić tabelke
page_id | user_id
i dodawać tak parami