| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

07-08-2008, 19:34
|
|
gourmet
Registrierter Benutzer
|
|
Registriert seit: Feb 2007
Beiträge: 154
|
|
hat beim ersten mal irgendwie nichts eingetragen
Hallo,
ich bastel grad an einer kleinen Rechteverwaltung für Benutzer einer kleinen Webanwendung.
Nun möchte ich nicht, dass jeder Zugriff auf alle Bereiche der Webseite hat, sondern nur auf die für ihn bestimmte Seiten.
Dafür hab ich mir nun mal folgendes Ausgedacht.
Meine Frage, ist das alles völliger Quark  oder hat jemand einen Verbesserungsvorschlag?
Code:
DB Tabelle
benutzer_rechte
CREATE TABLE IF NOT EXISTS `benutzer_rechte` (
`userid` int(30) unsigned NOT NULL,
`modul1` smallint(1) NOT NULL default '0',
`modul2` smallint(1) NOT NULL default '0',
KEY `userid` (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
0 wenn kein Recht
1 wenn Zutritt genehmigt
PHP-Code:
//Funktion
function check_nutzerrechte($user_rechte, $modul) {
if(isset($user_rechte[$modul]) && $user_rechte[$modul] == TRUE) {
$data = TRUE;
}
else {
$data = FALSE;
}
return $data;
}
//Die beiden Seiten stehen für jeden zur Verfügung
$_SESSION['user_rechte']['startseite'] = 1;
$_SESSION['user_rechte']['login'] = 1;
//Abfrage nach erfolgreichem login
$sql = mysql_query("SELECT... ");
$row = mysql_fetch_array($sql) ;
$_SESSION['user_rechte']['modul1'] = $row['modul1'];
$_SESSION['user_rechte']['modul2'] = $row['modul2'];
//$_GET['modul'] wird von der URL übergeben
//www.seite.de/index.php?modul=modul1
//Kontrolle
$check = check_nutzerrechte($_SESSION['user_rechte'], $_GET['modul']);
if($check == TRUE) {
require_once('modul.php');
}
else {
echo 'Du hast leider keine Berechtigung für dieses Modul';
}
Geändert von gourmet (07-08-2008 um 21:46 Uhr)
|

07-08-2008, 21:32
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Naja, problematisch wird, wenn du weitere Module hinzufügst, da du die Tabelle jedes mal um eine Spalte erweitern musst. Da ist eine Aufteilung auf mehrere Tabellen deutlich sinnvoller.
|

07-08-2008, 21:49
|
|
gourmet
Registrierter Benutzer
|
|
Registriert seit: Feb 2007
Beiträge: 154
|
|
stimmt es ist zu statisch, ich werde mir morgen weitere gedanken dazu machen.
|

08-08-2008, 08:22
|
|
UzumakiNaruto
Registrierter Benutzer
|
|
Registriert seit: Nov 2004
Ort: Hannover
Beiträge: 584
|
|
tbl_user
user_id
user_name
user_group_id
user_status #user, mod, admin
tbl_group
group_id
group_name
tbl_modul
modul_id
modul_name
[..]
tbl_rights
user_id
group_id
modul_id
#wenn user_id leer .. gucke nach ob group_id gefüllt ist
wäre EIN ansatz
__________________
Gruß
Uzu
|

08-08-2008, 11:09
|
|
gourmet
Registrierter Benutzer
|
|
Registriert seit: Feb 2007
Beiträge: 154
|
|
Hallo UzumakiNaruto,
ich wollte es eigentlich nicht so aufwendig machen und schon garnicht mit Gruppen, aber ich komme wahrscheinlich nicht drum herum und es ist am Ende wahrscheinlich doch die bessere Lösung
Ich habe die Tabellen mal ein wenig verändert, ist jetzt erst einmal alles blanke theorie.
tbl_user
user_id
group_id
user_name
...
tbl_group
group_id
group_name
tbl_modul
modul_id
modul_name
group_id
tbl_rights
user_id
modul_id
Abfrage: wenn ist modul, dann zutritt, wenn nicht eben nicht
|

08-08-2008, 11:16
|
|
xkl1986
Member
|
|
Registriert seit: May 2007
Ort: NRW
Beiträge: 215
|
|
Ich würde es evtl. mit einem Bitfeld realisieren.
Also z.B.
001101100
Eine 1 heißt zugriff, eine null heißt kein zugriff
in die datenbank wird dann die Dezimalzahl geschrieben
001101100 = 108
__________________
"Nicht jeder Mensch kann und soll Programmieren[...]".
|

08-08-2008, 11:18
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Du kannst die Gruppen auch weg lassen, die Tabellenstruktur bleibt so aufgedröselt.
Zitat:
|
Ich würde es evtl. mit einem Bitfeld realisieren.
|
Ist genau das gleiche wie die einzelnen Spalten, wird problematisch bei neuen Modulen, wenn der Wertebereich dann nicht mehr ausreicht.
|

08-08-2008, 11:22
|
|
xkl1986
Member
|
|
Registriert seit: May 2007
Ort: NRW
Beiträge: 215
|
|
Zitat:
Original geschrieben von PHP-Desaster
Du kannst die Gruppen auch weg lassen, die Tabellenstruktur bleibt so aufgedröselt.
Ist genau das gleiche wie die einzelnen Spalten, wird problematisch bei neuen Modulen, wenn der Wertebereich dann nicht mehr ausreicht.
|
Er sagte kleine Rechteverwaltung - Wertebereich sollte somit ausreichen  .
Aber sonst hast du natürlich völlig recht
__________________
"Nicht jeder Mensch kann und soll Programmieren[...]".
|

08-08-2008, 11:42
|
|
UzumakiNaruto
Registrierter Benutzer
|
|
Registriert seit: Nov 2004
Ort: Hannover
Beiträge: 584
|
|
Zitat:
Original geschrieben von gourmet
Hallo UzumakiNaruto,
ich wollte es eigentlich nicht so aufwendig machen und schon garnicht mit Gruppen, aber ich komme wahrscheinlich nicht drum herum und es ist am Ende wahrscheinlich doch die bessere Lösung 
Abfrage: wenn ist modul, dann zutritt, wenn nicht eben nicht
|
wie php-desaster schon erwähnte .. du kannst die gruppen auch weglassen (dann natürlich auch user_group_id, usw.)
tbl_rights reicht ja auch mit user_id und modul_id aus.
wird dann natürlich eine recht lange tabelle wenn es viele leute werden und vür den admin ein aufwand der enorm ist (bsp. täglich 20 neue benutzer).
da wäre evtl. zu überlegen ob es nicht schon ausreichen würde nach benutzerstatus zu selectieren.
sprich user, mod, admin.
tbl_modul
[...]
modul_rights #101 = user, 102 = mod, 103 = admin
tbl_user
user_rights = 101
user_rights <= modul_rights
admin (103) <= 101, 102, 103
mod(102) <= 101, 102
user(101) <= 101
__________________
Gruß
Uzu
|

08-08-2008, 11:52
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Zitat:
da wäre evtl. zu überlegen ob es nicht schon ausreichen würde nach benutzerstatus zu selectieren.
sprich user, mod, admin.
|
Verlagert das Problem nur. Wenn du mehrere Benutzerstati hinzugefügst, musst du entsprechend diese modul_rights anpassen. Es scheint mir eh ein wenig willkürlich, die Werte 101=user, 102=mod, 103=admin zu vergeben...
|

08-08-2008, 17:49
|
|
gourmet
Registrierter Benutzer
|
|
Registriert seit: Feb 2007
Beiträge: 154
|
|
Zitat:
Original geschrieben von gourmet
tbl_user
user_id
group_id
user_name
...
tbl_group
group_id
group_name
tbl_modul
modul_id
modul_name
group_id
tbl_rights
user_id
modul_id
|
Gruppen sind ok und werden jetzt fest eingeplant
bin gerade erst von arbeit gekommen und unterwegs ist mir eingefallen das das so ^^(tbl_modul) auch nicht geht 
denn es kann ja sein das verschiedene Gruppen auf ein und das selbe modul zugreifen können.
ich werde jetzt mal eben ne stunde darüber nachdenken und dann was dazu posten.
|

08-08-2008, 18:50
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Darum hat UzumakiNaruto das ja auch so gemacht:
Zitat:
tbl_modul
modul_id
modul_name
[..]
tbl_rights
user_id
group_id
modul_id
#wenn user_id leer .. gucke nach ob group_id gefüllt ist
|
.
|

08-08-2008, 19:25
|
|
gourmet
Registrierter Benutzer
|
|
Registriert seit: Feb 2007
Beiträge: 154
|
|
ist schon richtig, aber ich möchte die rechte nicht am user festmachen, sondern an den gruppen, wenn ich denn schon welche habe
meine tbl sehen jetzt so aus, also nicht viel anders
tbl_user
user_id
group_id
user_name
...
tbl_group
group_id
group_name
tbl_modul
modul_id
modul_name
tbl_modul_groups
mg_id
modul_id
group_id
nun muss ich "nur" noch tbl_user, tbl_modul und tbl_modul_groups mit nem join zusammenbasteln
|

08-08-2008, 20:06
|
|
UzumakiNaruto
Registrierter Benutzer
|
|
Registriert seit: Nov 2004
Ort: Hannover
Beiträge: 584
|
|
Zitat:
Original geschrieben von gourmet
ist schon richtig, aber ich möchte die rechte nicht am user festmachen, sondern an den gruppen, wenn ich denn schon welche habe 
meine tbl sehen jetzt so aus, also nicht viel anders
tbl_user
user_id
group_id
user_name
...
tbl_group
group_id
group_name
tbl_modul
modul_id
modul_name
tbl_modul_groups
mg_id
modul_id
group_id
nun muss ich "nur" noch tbl_user, tbl_modul und tbl_modul_groups mit nem join zusammenbasteln
|
mg_id brauchst du nicht wenn du modul_id und group_id als zusammenhängenden primärschlüssel erstellst
beim anmelden wirst du ja sicherlich alle relevanten daten in einer session speichern, da kannste dann auch die user_group_id abspeichern.
dann wirst du sicherlich eine navigation bauen in denen alle module angezeigt werden zu denen der user die berechtigung hat.
Code:
SELECT m.*
FROM tbl_modul m
WHERE tbl_modul_group.group_id = $_SESSION['group_id']
AND tbl_modul_group.modul_id = m.group_id;
__________________
Gruß
Uzu
|

08-08-2008, 20:08
|
|
gourmet
Registrierter Benutzer
|
|
Registriert seit: Feb 2007
Beiträge: 154
|
|
mein getesteter join  , vielleicht kann ja ein joinprofi mal drüber gucken, denn ich bin nicht der joinprofi. immer dieses inner, outer, left, right,drunter, drüber join
PHP-Code:
$sql = "SELECT t1.modul_id, t1.group_id, t2.group_id, t3.modul_id, t3.modul_name
FROM tbl_modul_groups t1 INNER JOIN tbl_user t2 LEFT JOIN tbl_modul t3
ON t1.group_id = t2.group_id WHERE t3.modul_id = t1.modul_id";
Zitat:
Original geschrieben von UzumakiNaruto
mg_id brauchst du nicht wenn du modul_id und group_id als zusammenhängenden primärschlüssel erstellst 
beim anmelden wirst du ja sicherlich alle relevanten daten in einer session speichern, da kannste dann auch die user_group_id abspeichern.
|
mg_id ist weg, das war mir neu mit den zusammenhängenden primärschlüsseln, wieder was gelernt  .
aber was ich nicht verstehe ist die user_group_id, ist das die group_id?
Geändert von gourmet (08-08-2008 um 21:00 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|