Dzięki Wam. Narazie wykombinowałem coś takiego:
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"pl\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-2\" />
<meta http-equiv=\"Reply-to\" content=\"matid@seishi.net\" />
<link rel=\"stylesheet\" title=\"default\" type=\"text/css\" href=\"style.css\" />
</head>
<body>
<?
require_once(\"adodb/adodb.inc.php\");
$sql = &ADONewConnection('mysql');
$sql->connect(\"localhost\",\"anime\",\"anime\",\"chmod\"); // laczy z baza danych
class user {
function info($id){
$users = $sql->execute(\"SELECT id, login FROM user WHERE id = '\" . $id . \"'\");
$this->id = $users->fields['id'];
$this->login = $users->fields['login'];
}
function group($id){
$r_1 = $sql->execute(\"SELECT id, nazwa, grupa_nadrzedna FROM grupa WHERE id = '$id'\");
$this->group_data[] = array(\"id\" => $r_1->fields['id'], \"nazwa\" => $r_1->fields['nazwa'], \"grupa_nadrzedna\" => $r_1->fields['grupa_nadrzedna']); if($r_1->fields['grupa_nadrzedna']!=0){
$this->group($r_1->fields['grupa_nadrzedna']);
}
}
function groups($id){
$r_1 = $sql->execute(\"SELECT id_grupa FROM user_grupa WHERE id_user = '\" . $id . \"'\");
while(!$r_1->EOF){
$r_2 = $sql->execute(\"SELECT id, nazwa, grupa_nadrzedna FROM grupa WHERE id = '\" . $r_1->fields['id_grupa'] . \"'\");
$this->group[] = array(\"id\" => $r_2->fields['id'], \"nazwa\" => $r_2->fields['nazwa'], \"grupa_nadrzedna\" => $r_2->fields['grupa_nadrzedna']); $r_1->MoveNext();
}
}
function auth($id, $dzial){
$this->groups($id);
for($i=0;$i<count($this->group);$i++){
$this->group($this->group[$i]['id']);
}
$this->group = $this->group_data;
$this->dzial($dzial);
for($ag = 0; $ag<count($this->group); $ag++){
$r_1 = $sql->execute(\"SELECT id_uprawnienia_zespolu FROM grupa_zespol_uprawnien WHERE id_grupa = '\" . $this->group[$ag]['id'] . \"'\");
while(!$r_1->EOF){
$r_2 = $sql->execute(\"SELECT id_uprawnien FROM uprawnienia_zespol WHERE id = '\" . $r_1->fields['id_uprawnienia_zespolu'] . \"'\");
while(!$r_2->EOF){
$r_3 = $sql->execute(\"SELECT id, nazwa, liczba FROM uprawnienia WHERE id = '\" . $r_2->fields['id_uprawnien'] . \"'\");
for($z=0; $z<count($this->dzial['uprawnienia']); $z++){
if($r_3->fields['id']==$this->dzial['uprawnienia'][$z]){
$liczba += $r_3->fields['liczba'];
$result[] = array(\"id\" => $r_3->fields['id'], \"nazwa\" => $r_3->fields['nazwa'], \"odczyt\" => $r_3->fields['liczba'][0], \"zapis\" => $r_3->fields['liczba'][1], \"edycja\" => $r_3->fields['liczba'][2], \"usuwanie\" => $r_3->fields['liczba'][3]); }
}
$r_2->MoveNext();
}
$r_1->MoveNext();
}
}
if($liczba>1111){
$liczba = 1111;
}
$liczba = $this->zeroFill($liczba,'4');
$result['perms'] = array(\"odczyt\" => $liczba[0], \"zapis\" => $liczba[1], \"edycja\" => $liczba[2], \"usuwanie\" => $liczba[3]); return $result;
}
function check($usr_id,$dzial, $upr_id, $what){
$auth = $this->auth($usr_id,$dzial);
for($i=0; $i<count($auth)-1; $i++){
if($auth[$i]['id']==$upr_id){
return $auth[$i][$what];
}
}
return 0;
}
function zeroFill($liczba, $ilosc_cyfr) {
if($ile < $ilosc_cyfr){
$liczba *= pow(10,$ilosc_cyfr-$ile);
}
return $liczba;
}
function dzial($id){
$r_1 = $sql->execute(\"SELECT id, nazwa FROM dzialy_strony WHERE id = '$id'\");
$r_2 = $sql->execute(\"SELECT id_uprawnienia FROM dzialy_strony_uprawnienia WHERE id_dzialy_strony
'$id'\");
while(!$r_2->EOF){
$auth[] = $r_2->fields['id_uprawnienia'];
$r_2->MoveNext();
}
$return = array(\"id\" => $r_1->fields['id'], \"nazwa\" => $r_1->fields['nazwa'], \"uprawnienia\" => $auth);
$this->dzial = $return;
return $return;
}
}
$user = new user;
$user->info(1); // pobiera dane użytkownika o id == 1
$dzial = 1; // numer dzialu
$auth = $user->auth($user->id,$dzial);
echo \"Uprawnienia użytkownika: <br /><hr noshade size=1 color=black />\";
echo \"Dział: \" . $user->dzial['nazwa'] . \"<br />\";
for($i=0; $i<count($auth)-1; $i++){
echo \"ID: \" . $auth[$i]['id'] . \"<br />\";
echo \"Nazwa: \" . $auth[$i]['nazwa'] . \"<br />\";
echo \"Uprawnienia:<ul>\";
echo \"<li>Odczyt: \" . $auth[$i]['odczyt'] . \"</li>\";
echo \"<li>Zapis: \" . $auth[$i]['zapis'] . \"</li>\";
echo \"<li>Edycja: \" . $auth[$i]['edycja'] . \"</li>\";
echo \"<li>Usuwanie: \" . $auth[$i]['usuwanie'] . \"</li>\";
echo \"</ul>\";
echo \"<hr noshade size=1 color=black />\";
}
echo \"Uprawnienia końcowe: <br /><ul>\";
echo \"<li>Odczyt: \" . $auth['perms']['odczyt'] . \"</li>\";
echo \"<li>Zapis: \" . $auth['perms']['zapis'] . \"</li>\";
echo \"<li>Edycja: \" . $auth['perms']['edycja'] . \"</li>\";
echo \"<li>Usuwanie: \" . $auth['perms']['usuwanie'] . \"</li></ul>\";
echo $user->check($user->id,$dzial,3,\"edycja\"); // sprawdza czy uzytkownik ma upranienia do edycji tego, co opisuje w bazie uprawn
enie o id = 3
?>
</body>
</html>
i baza danych:
# MySQL-Front Dump 2.5
CREATE TABLE IF NOT EXISTS dzialy_strony (
id tinyint(3) UNSIGNED DEFAULT '0' ,
nazwa varchar(10) DEFAULT '0'
);
INSERT
INTO dzialy_strony VALUES("1", "Newsy");
INSERT
INTO dzialy_strony VALUES("2", "Artykuły");
CREATE TABLE IF NOT EXISTS dzialy_strony_uprawnienia (
id_dzialy_strony tinyint(3) UNSIGNED DEFAULT '0' ,
id_uprawnienia tinyint(3) UNSIGNED DEFAULT '0'
);
INSERT
INTO dzialy_strony_uprawnienia VALUES("1", "1");
INSERT
INTO dzialy_strony_uprawnienia VALUES("1", "2");
INSERT
INTO dzialy_strony_uprawnienia VALUES("1", "3");
INSERT
INTO dzialy_strony_uprawnienia VALUES("1", "4");
INSERT
INTO dzialy_strony_uprawnienia VALUES("2", "5");
CREATE TABLE IF NOT EXISTS grupa (
id tinyint(3) UNSIGNED DEFAULT '0' ,
nazwa varchar(50) DEFAULT '0' ,
grupa_nadrzedna tinyint(3) UNSIGNED DEFAULT '0'
);
INSERT
INTO grupa VALUES("1", "Użytkownicy", "0");
INSERT
INTO grupa VALUES("2", "Administratorzy", "1");
INSERT
INTO grupa VALUES("0", "Goście", "0");
INSERT
INTO grupa VALUES("3", "Redaktorzy", "1");
CREATE TABLE IF NOT EXISTS grupa_zespol_uprawnien (
id_grupa tinyint(3) DEFAULT '0' ,
id_uprawnienia_zespolu tinyint(3) UNSIGNED DEFAULT '0'
);
INSERT
INTO grupa_zespol_uprawnien VALUES("1", "1");
INSERT
INTO grupa_zespol_uprawnien VALUES("2", "2");
INSERT
INTO grupa_zespol_uprawnien VALUES("1", "3");
INSERT
INTO grupa_zespol_uprawnien VALUES("3", "4");
INSERT
INTO grupa_zespol_uprawnien VALUES("1", "5");
CREATE TABLE IF NOT EXISTS uprawnienia (
id tinyint(3) UNSIGNED DEFAULT '0' ,
nazwa varchar(50) DEFAULT '0' ,
liczba int(4) UNSIGNED ZEROFILL DEFAULT '0000'
);
INSERT
INTO uprawnienia VALUES("2", "Administracja newsami", "0011");
INSERT
INTO uprawnienia VALUES("1", "Przeglądanie newsów", "1000");
INSERT
INTO uprawnienia VALUES("3", "Komentowanie newsów", "1100");
INSERT
INTO uprawnienia VALUES("4", "Dodawanie newsów", "0110");
INSERT
INTO uprawnienia VALUES("5", "Przeglądanie artykułów", "1000");
CREATE TABLE IF NOT EXISTS uprawnienia_zespol (
id tinyint(3) UNSIGNED DEFAULT '0' ,
nazwa varchar(50) DEFAULT '0' ,
id_uprawnien tinyint(3) UNSIGNED DEFAULT '0'
);
INSERT
INTO uprawnienia_zespol VALUES("1", "Administracja newsami", "1");
INSERT
INTO uprawnienia_zespol VALUES("2", "Przegladanie newsów", "2");
INSERT
INTO uprawnienia_zespol VALUES("3", "Komentowanie newsów", "3");
INSERT
INTO uprawnienia_zespol VALUES("4", "Dodawanie newsów", "4");
INSERT
INTO uprawnienia_zespol VALUES("5", "Przeglądanie artykułów", "5");
CREATE TABLE IF NOT EXISTS user (
id tinyint(3) UNSIGNED NOT NULL DEFAULT '0' ,
login varchar(10) DEFAULT '0' ,
PRIMARY KEY (id)
);
INSERT
INTO user VALUES("1", "matid");
CREATE TABLE IF NOT EXISTS user_grupa (
id_user tinyint(3) UNSIGNED DEFAULT '0' ,
id_grupa tinyint(3) UNSIGNED DEFAULT '0'
);
INSERT
INTO user_grupa VALUES("1", "3");
Skrypt korzysta z ADODB i bez tego nie ruszy

Proszę o opinie.