User level system

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

User level system

Δημοσίευση από ThyClub » 05 Ιαν 2006 18:25

Λοιπόν θέλω να φτιάξω ενα user level system και προς το παρόν έχω καταλήξει στην εξής μορφή:

table.users:

Κώδικας: Επιλογή όλων

id    name    group    ktl
1    basdog    1         ...
2    tade        2         ...
3    Guest      3         ...

 
table.usergroups

Κώδικας: Επιλογή όλων

id    name    level     read    write
1     admins    1        ALL     ALL
2     regged   500      ALL     NONE
3     anon      1000    1,2,3.. NONE
4     mods     200      ALL     1,3,8

Στα παραπάνω κάθε χρήστης πέρνει τα δικαιώματα του απο το usergroup όπου ανήκει. Τα 1,2,3,4 κτλ είναι διάφορα sections όπου το κάθε group έχει access. Όπου ALL σημαίνει οτι έχει δικαιώματα σε όλες τις περιοχές.
Όλα καλά μέχρι τώρα...

Δημιουργώ ενα module (φόρουμ) και θέλω κάθε υποκατηγορία να έχει διαφορετικά access. ΠΧ :
category canBeReadBy canPostInto
1 2 2
Στο παραπάνω έχω δώσει μια κατηγορία όπου τα εγγεγραμμένα μέλη μπορούν να διαβάσουν τα ποστ καθώς και να γράψουν εκεί. Αυτό αποκλείει τους anonymous users απο το να δούν τα περιεχόμενα αλλά και να κάνουν ενα νέο ποστ. Αποκλείει όμως και τους Admins & mods.

Έχω κολήσει αυτή την στιγμή και δεν μπορώ να σκεφτώ καθόλου. Είναι απλό αλλά ... πώς θα μπορούσα να το κάνω να αφήνει τους σωστούς χρήστες να μπορούν να κάνουν ποστ κτλ κτλ?

Βέβαια τώρα που το γράφω αυτό το κείμενο μου ήρθαν 2-3 ιδέες :wink:

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6230
Εγγραφή: 30 Νοέμ 2004 03:09

User level system

Δημοσίευση από fafos » 05 Ιαν 2006 20:51

Enas tropos einai na feiakseis mia function opou me kapoia if na dineis analogh prosvash opos parakato:

Κώδικας: Επιλογή όλων

function get_access_level() {
		$sql = sprintf("SELECT access_level FROM %s WHERE login = '%s' AND active = 'y'", $this->table_name, $this->user);
		if (!$result = mysql_query($sql)) {
		   $this->the_msg = $this->messages(1);
		} else {
			$this->access_level = mysql_result($result, 0, "access_level");
		}
	}
epomenh funcion einai auth pou kanei eisodo sthn analogh selida kai krataei tis sessions gia oles tis epomenes (login):

Κώδικας: Επιλογή όλων

function access_page($refer = "", $qs = "", $level = DEFAULT_ACCESS_LEVEL) {
		$refer_qs = $refer;
		$refer_qs .= ($qs != "") ? "?".$qs : "";
		if (isset($_SESSION['user']) && isset($_SESSION['pw'])) {
			$this->user = $_SESSION['user'];
			$this->user_pw = $_SESSION['pw'];
			$this->get_access_level();
			if (!$this->check_user()) {
				$_SESSION['referer'] = $refer_qs;
				header("Location: ".$this->login_page);
			}
			if &#40;$this->access_level < $level&#41; &#123;
				header&#40;"Location&#58; ".$this->deny_access_page&#41;;
			&#125;
		&#125; else &#123; 
			$_SESSION&#91;'referer'&#93; = $refer_qs;
			header&#40;"Location&#58; ".$this->login_page&#41;;
		&#125;
	&#125;
Parathreis oti yparxei to $level = DEFAULT_ACCESS_LEVEL, apo auto tha pairnei to analogo level gia kathe xrhsth opos exei egrafei (oi arithmoi prepei na dinontai me seira pros ta pano Admin 1, moderator 2 klp)
Auto to level prepei na to orizeis esy apo to control panel sou gia kathe omada xrhston...

An valoume autes tis functions se ena arxeio pou tha to onomasoume p.x. user_access.php stis selides pou tha prepei na vlepei o xrhsths prepei na dosoume ton parakato kodika:

Κώδικας: Επιλογή όλων

<?php 
include&#40;$_SERVER&#91;'DOCUMENT_ROOT'&#93;."user_access.php"&#41;; 
$access_level = new Access_user;
$access_level->access_page&#40;$_SERVER&#91;'PHP_SELF'&#93;, "", 2&#41;; 

if &#40;isset&#40;$_GET&#91;'action'&#93;&#41; && $_GET&#91;'action'&#93; == "log_out"&#41; &#123;
	$access_level->log_out&#40;&#41;; 
&#125;
?>
O arithmos 2 dhlonei to megalytero level pou prepei o xrhsths gia na dei thn selida.. auto mporei na allazei automata kalontas to me mia metavlhth apo thn vash analoga thn selida.. an h selida dei xrhsth me level megalytero tou 2 tote tha kopsei thn eisodo, allios tha ton kanei login kanonika..
Enoeite oti sthn user_access.php exeis valei ola ta aparaithta stoixeia gia ton user..

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

User level system

Δημοσίευση από ThyClub » 05 Ιαν 2006 21:08

thnks fafos :victory:

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

User level system

Δημοσίευση από Rapid-eraser » 05 Ιαν 2006 23:23

pavtos prospa8ise va kavovikopiiseis pio poli tous pivakes
px times tou style 1,2,3 dev eivai kali idea
ftiakse eva deftero pivaka pou va bazeis per row ta dikeomata
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

User level system

Δημοσίευση από dva_dev » 07 Ιαν 2006 21:40

Εχεις αποφασίσει...

1)ποιά είναι τα όλα δικαιώματα συνολικά που θα έχεις

2)τα διάφορα θέματα του forum σου θα χρησιμοποιούν όλα τα ίδια δικαιώματα που έχεις στα groups/users ή μπορεί κάθε θέμα να έχει ξεχωριστά δικαιώματα από κάποιο άλλο (πχ το group 1 δεν έχει δικαίωμα για post στο θέμα 1 αλλά έχει στο θέμα 2, ή, κάποιο θέμα που έχει δικαίωμα να του γίνουν post μπορούν να γίνουν post από όλους τους users/groups).

3)αν κάποιος χρήστης θα μπορεί να ανήκει μόνο σε ένα group ή περισσότερα;

4)αν μπορεί κάποιος χρήστης να έχει κάποια δικαιώματα παραπάνω ή λιγότερα από αυτά που έχει το group στο οποίο ανήκει;

5)αν ανήκει ένας χρήστης σε δύο group, το ένα group ορίζει ότι τα μέλη του έχουν δικαίωμα να κάνουν post για παράδειγμα αλλά όχι delete, και το άλλο group ορίζει ότι τα μέλη του μπορούν μόνο να κάνουν read, ούτε post ούτε delete, ούτε τίποτα, τι πολιτική θα ακολουθήσεις;

6)η πολιτική που θα ακολουθήσεις ποιά είναι:
Θα θεωρείς ότι όλοι έχουν δικαίωμα να κάνουν τα πάντα και θα αρχίσεις να αφαιρείς δικαιώματα,
ή...
Θα θεωρείς ότι δεν έχουν κανένα δικαίωμα και θα αρχίσεις να δίνεις.
Σε μια ιεραρχική δομή ένας top down έλεγχος συνήθως είναι πιο γρήγορος για την πρώτη πολιτική, και ένας bottom up πιο γρήγορος για την δεύτερη.

Επειδή ίσως δεν τα περιγράφω τις σκέψεις μου καλά, να σε παραπέμψω και στο σύστημα διαχείρισης χρηστών, ασφάλειας που έχουν τα windows NT/2000/XP/2003 (μην κοιτάξεις τίποτα xp home editions).

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης