php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 07-08-2008, 20:34
gourmet
 Registrierter Benutzer
Links : Onlinestatus : gourmet ist offline
Registriert seit: Feb 2007
Beiträge: 154
Blog-Einträge: 1
gourmet ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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 22:46 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 07-08-2008, 22:32
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #3 (permalink)  
Alt 07-08-2008, 22:49
gourmet
 Registrierter Benutzer
Links : Onlinestatus : gourmet ist offline
Registriert seit: Feb 2007
Beiträge: 154
Blog-Einträge: 1
gourmet ist zur Zeit noch ein unbeschriebenes Blatt
Standard

stimmt es ist zu statisch, ich werde mir morgen weitere gedanken dazu machen.
Mit Zitat antworten
  #4 (permalink)  
Alt 08-08-2008, 09:22
UzumakiNaruto
 Registrierter Benutzer
Links : Onlinestatus : UzumakiNaruto ist offline
Registriert seit: Nov 2004
Beiträge: 642
UzumakiNaruto befindet sich auf einem aufstrebenden Ast
Standard

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

private Homepage
Mit Zitat antworten
  #5 (permalink)  
Alt 08-08-2008, 12:09
gourmet
 Registrierter Benutzer
Links : Onlinestatus : gourmet ist offline
Registriert seit: Feb 2007
Beiträge: 154
Blog-Einträge: 1
gourmet ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #6 (permalink)  
Alt 08-08-2008, 12:16
xkl1986
 Member
Links : Onlinestatus : xkl1986 ist offline
Registriert seit: May 2007
Ort: NRW
Beiträge: 215
xkl1986 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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[...]".
Mit Zitat antworten
  #7 (permalink)  
Alt 08-08-2008, 12:18
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #8 (permalink)  
Alt 08-08-2008, 12:22
xkl1986
 Member
Links : Onlinestatus : xkl1986 ist offline
Registriert seit: May 2007
Ort: NRW
Beiträge: 215
xkl1986 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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[...]".
Mit Zitat antworten
  #9 (permalink)  
Alt 08-08-2008, 12:42
UzumakiNaruto
 Registrierter Benutzer
Links : Onlinestatus : UzumakiNaruto ist offline
Registriert seit: Nov 2004
Beiträge: 642
UzumakiNaruto befindet sich auf einem aufstrebenden Ast
Standard

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

private Homepage
Mit Zitat antworten
  #10 (permalink)  
Alt 08-08-2008, 12:52
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

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...
Mit Zitat antworten
  #11 (permalink)  
Alt 08-08-2008, 18:49
gourmet
 Registrierter Benutzer
Links : Onlinestatus : gourmet ist offline
Registriert seit: Feb 2007
Beiträge: 154
Blog-Einträge: 1
gourmet ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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.
Mit Zitat antworten
  #12 (permalink)  
Alt 08-08-2008, 19:50
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

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
.
Mit Zitat antworten
  #13 (permalink)  
Alt 08-08-2008, 20:25
gourmet
 Registrierter Benutzer
Links : Onlinestatus : gourmet ist offline
Registriert seit: Feb 2007
Beiträge: 154
Blog-Einträge: 1
gourmet ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #14 (permalink)  
Alt 08-08-2008, 21:06
UzumakiNaruto
 Registrierter Benutzer
Links : Onlinestatus : UzumakiNaruto ist offline
Registriert seit: Nov 2004
Beiträge: 642
UzumakiNaruto befindet sich auf einem aufstrebenden Ast
Standard

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

private Homepage
Mit Zitat antworten
  #15 (permalink)  
Alt 08-08-2008, 21:08
gourmet
 Registrierter Benutzer
Links : Onlinestatus : gourmet ist offline
Registriert seit: Feb 2007
Beiträge: 154
Blog-Einträge: 1
gourmet ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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 22:00 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:10 Uhr.