PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Rechtesys für Webseite (https://www.php-resource.de/forum/php-developer-forum/93284-rechtesys-fuer-webseite.html)

gourmet 07-08-2008 19:34

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';



PHP-Desaster 07-08-2008 21:32

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.

gourmet 07-08-2008 21:49

stimmt es ist zu statisch, ich werde mir morgen weitere gedanken dazu machen.

UzumakiNaruto 08-08-2008 08:22

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

gourmet 08-08-2008 11:09

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 ;)

xkl1986 08-08-2008 11:16

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

PHP-Desaster 08-08-2008 11:18

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.

xkl1986 08-08-2008 11:22

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 :D .

Aber sonst hast du natürlich völlig recht

UzumakiNaruto 08-08-2008 11:42

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

PHP-Desaster 08-08-2008 11:52

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...

gourmet 08-08-2008 17:49

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.

PHP-Desaster 08-08-2008 18:50

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
.

gourmet 08-08-2008 19:25

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 ;)

UzumakiNaruto 08-08-2008 20:06

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;


gourmet 08-08-2008 20:08

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?


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:02 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG