Διαχείριση Ιεραρχίας Χρηστών (User Levels)

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

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

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από geomagas » 27 Σεπ 2013 18:40

Antonis78 έγραψε:Μία ερώτηση, αν χρειαστώ και καινούργιο level, ας πούμε ανάμεσα από τον Admin & Supervisor (SubAdmin), θα χρειαστώ καινούργιο πίνακα, σωστά; Επίσης, να κάνω και τις σχέσεις μεταξύ τους, ε;
Σωστά, θα χρειαστείς νέο πίνακα, αφού ορίζεις νέα κλάση.
Με την υπόθεση ότι είναι 1:Ν προς τις δυο κατευθύνσεις, θα είναι

SubAdmin(user [pk][fk User], admin [fk Admin])

... δηλαδή την μέχρι τώρα δομή του Supervisor.

Επίσης, θα πρέπει να αλλάξεις το FK του Supervisor να δείχνει πλέον στον SubAdmin και όχι στον Admin (αυτό είναι το πιο δύσκολο κομμάτι, αλλά δεν είναι και "βουνό"...).

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από geomagas » 27 Σεπ 2013 18:54

Antonis78 έγραψε:@alou: ο geomagas έχει δίκιο. Το πρόβλημά μου δεν είναι δικαιώματα αλλά scope δεδομένων. Η ιδέα σου είναι αυτό που είχα σκεφτεί στην αρχή αλλά τελικά δεν κάνει. Ευχαριστώ πάντως!
Να προσθέσω ότι, στην πορεία θα είναι και θέμα δικαιωμάτων. Δεν το απέκλεισα. Ο κάθε ρόλος μάλλον θα έχει τα δικά του.
Απλά δεν είναι θέμα subset/superset δικαιωμάτων. Με άλλα λόγια, δεν προκύπτει από κάπου ότι πχ ο Admin θα έχει τα δικαιώματα του Supervisor συν κάποια παραπάνω. Μπορεί ο Supervisor να έχει δικαιώματα που να μην τα έχει ο Admin, και το αντίστροφο, όπως και να μοιράζονται ένα κοινό σύνολο.
Αλλά αυτό φαντάζομαι ότι δεν αφορά το topic...

Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από Antonis78 » 27 Σεπ 2013 19:05

Το θέμα των δικαιωμάτων το έχω ήδη σκεφτεί πως θα το κάνω και για αυτό δεν το αναφέρω στο topic. Αυτό που με καίει είναι πως μπορώ να κάνω όσο γίνεται πιο flexible την διαχείριση των χρηστών όσον αφορά το scope των δεδομένων. Θέλω να την δομίσω έτσι ώστε αν στο μέλλον χρειαστώ και άλλα levels να μπορώ να το κάνω γρήγορα και χωρίς να χρειάζεται να αλλάξω όλα τα queries.

Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από Antonis78 » 30 Σεπ 2013 15:51

Λοιπόν επανέρχομαι. Με βάση αυτά που μου είπε ο geomagas η βάση θα είναι κάπως έτσι

Persons
id -> pk
name

Users
personId -> pk, fk Persons
username
password

Customers
personId -> pk, fk Persons
accountManagerId -> fk AccountManagers

RegisteredCustomers
customer -> pk, fk Customers
userId -> fk Users

Admins
userId -> pk, fk Users

Supervisors
userId -> pk, fk Users

SalesAdmin
userId -> pk, fk Users
supervisorId -> fk Supervisors

AccountManagers
userId -> pk, fk Users

SalesAdmins_AccountManagers
salesAdminId -> pk, fk SalesAdmin
accountManagerId -> pk, fk AccountManagers

Admins_Supervisors
adminId -> pk, fk Admins
supervisorId -> pk, fk Supervisors

Σωστά; Τι μορφή θα έχει το query αν θέλουμε πχ να δούμε τους Customers ενός Supervisor;

Επίσης, αν θέλουμε να το κάνουμε πιο flexible θα μπορούσαμε να κάνουμε ένα πίνακα Persons2Persons ώστε όλοι οι χρήστες να έχουν σχέση Μ:Ν;
Persons2Persons
parentId -> pk, fk Persons
childId -> pk, fk Persons

Αυτό σημαίνει ότι ο πίνακας SalesAdmins θα γίνει
SalesAdmin
userId -> pk, fk Users

και ο πίνακας Customers
Customers
personId -> pk, fk Persons

Σε συνδυασμό με ένα πίνακα UserGroups όπου θα κρατάω το όνομα του πίνακα και την ιεραρχία, νομίζω ότι έτσι θα μπορώ να προσθέτω καινούργια levels χωρίς να φτιάχνω τις σχέσεις μεταξύ των πινάκων. Τι νομίζετε;

Ευχαριστώ

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από geomagas » 30 Σεπ 2013 17:19

Antonis78 έγραψε:Persons
id -> pk
name

Users
personId -> pk, fk Persons
username
password

Customers
personId -> pk, fk Persons
accountManagerId -> fk AccountManagers
Σωστά ως εδώ.
Antonis78 έγραψε:RegisteredCustomers
customer -> pk, fk Customers
userId -> fk Users
Εδώ κάνεις ένα λάθος. Είπαμε ότι RegisteredCustomer is a Customer και ταυτόχρονα RegisteredCustomer is a User.
Άρα, το κύριο κλειδί θα πρέπει να είναι συγχρόνως και ξένο κλειδί προς τους δύο πίνακες.
Ένας πίνακας σαν αυτόν που λες,
- αφ' ενός θα σου επιτρέψει να εισάγεις εγγραφές με customer<>userId (δηλ. άλλο person σαν χρήστης και άλλο σαν customer) και
- αφ' ετέρου θα έχεις πολλαπλή αντιστοίχιση users/customers, πχ οι εγγραφές με customer=48 και customer=65 να αντιστοιχούν και οι δύο στο userid=76.
Το σωστό είναι να υπάρχει ένα μόνο πεδίο: RegisteredCustomer(customer [pk][fk Customer][fk User]).
Antonis78 έγραψε:Admins
userId -> pk, fk Users

Supervisors
userId -> pk, fk Users

SalesAdmin
userId -> pk, fk Users
supervisorId -> fk Supervisors

AccountManagers
userId -> pk, fk Users

SalesAdmins_AccountManagers
salesAdminId -> pk, fk SalesAdmin
accountManagerId -> pk, fk AccountManagers

Admins_Supervisors
adminId -> pk, fk Admins
supervisorId -> pk, fk Supervisors
Νόμιζα ότι η σχέση Admin<-->Supervisor είναι 1:Ν (ο κάθε supervisor είναι κάτω από έναν και μόνο admin).
Αν είναι έτσι, προσθέτεις ένα admin [fk Admins] στον Supervisor και καταργείς τον Admins_Supervisors.
Κατά τα άλλα, συμφωνούμε.
Antonis78 έγραψε:Τι μορφή θα έχει το query αν θέλουμε πχ να δούμε τους Customers ενός Supervisor;
Ακόμα δεν φτάσαμε εκεί. Το παραπάνω σχήμα σου εξασφαλίζει τις απαιτήσεις σου, όλες εκτός από μία:
Antonis78 νωρίτερα έγραψε:- Ο καθε Account Manager μπορεί να ανήκει σε πολλούς Sales Admin (του ίδιου Supervisor όμως)
Αλλά επειδή είναι λίγο πιο πολύπλοκο, προτιμώ να το πούμε αφού ξεκαθαρίσουμε με τα υπόλοιπα.
Antonis78 έγραψε:Επίσης, αν θέλουμε να το κάνουμε πιο flexible θα μπορούσαμε να κάνουμε ένα πίνακα Persons2Persons ώστε όλοι οι χρήστες να έχουν σχέση Μ:Ν;
Persons2Persons
parentId -> pk, fk Persons
childId -> pk, fk Persons

Αυτό σημαίνει ότι ο πίνακας SalesAdmins θα γίνει
SalesAdmin
userId -> pk, fk Users

και ο πίνακας Customers
Customers
personId -> pk, fk Persons
Ναι θα μπορούσες, αλλά δεν βλέπω τη σκοπιμότητα (τι θα κερδίσεις).
Επίσης, είναι λεπτή η γραμμή που χωρίζει το flexibility από την αναρχία... Σκέψου το.
Antonis78 έγραψε:Σε συνδυασμό με ένα πίνακα UserGroups όπου θα κρατάω το όνομα του πίνακα και την ιεραρχία, νομίζω ότι έτσι θα μπορώ να προσθέτω καινούργια levels χωρίς να φτιάχνω τις σχέσεις μεταξύ των πινάκων.
Αν εννοείς ότι θα αποθηκεύεις όνομα πίνακα σε τιμή πεδίου.... Μην -επαναλαμβάνω- ΜΗΝ το κάνεις.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από korgr » 30 Σεπ 2013 17:34

geomagas έγραψε: Αν εννοείς ότι θα αποθηκεύεις όνομα πίνακα σε τιμή πεδίου.... Μην -επαναλαμβάνω- ΜΗΝ το κάνεις.
Αλλιώς θα πεθάνει ένα γατάκι! :lol:

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από jpk » 30 Σεπ 2013 17:42

Όλοι οι admin είναι ένα είδος , άρα πρέπει να είναι σε ένα πίνακα. Λίγο πιο απλό από την δική μου οπτική είναι να ξεχωρίσεις τα levels τους creators και τα authorities.

Ένα level είναι ένα πραγματικό επίπεδο στην εφαρμογή π.χ. super admin , admin , admin user .Οι creators είναι φυσικά αυτοί που δημιούργησα τους admin users και έχουν δικαίωμα να τους δώσουν τόσα authorities όσα έχουν αυτοί οι λιγότερα. Φυσικά και υπάρχουν groupsauthorities δηλαδή κάποιες συγκεκριμένες εξουσιοδοτήσεις για να μην τις δίνουμε ανά χρήστη. Φυσικά οι εξουσιοδοτήσεις authorities έχουν να κάνουν με την εφαρμογή.

Είναι αυθαίρετο να λες πάντα ότι ο user X δεν έχει authority privilege 999 στο section 3, Ναι .. μόνο η εφαρμογή το καταλαβαίνει αλλά με καλό documentation και από πλευράς βάσης και από πλευράς αντικειμένων που θα προκύψουν από αυτή μπορεί να βγει νόημα.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από geomagas » 30 Σεπ 2013 17:44

korgr έγραψε:
geomagas έγραψε: Αν εννοείς ότι θα αποθηκεύεις όνομα πίνακα σε τιμή πεδίου.... Μην -επαναλαμβάνω- ΜΗΝ το κάνεις.
Αλλιώς θα πεθάνει ένα γατάκι! :lol:
...Αλλιώς δεν θα μάθει να χρησιμοποιεί σωστά τα εργαλεία που έχει στη διάθεσή του...

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από korgr » 30 Σεπ 2013 18:58

geomagas έγραψε: ...Αλλιώς δεν θα μάθει να χρησιμοποιεί σωστά τα εργαλεία που έχει στη διάθεσή του...
Σημασία έχει να χρησιμοποιεί με τέτοιο τρόπο τα εργαλεία του, ώστε στο τέλος να έχει ΣΩΣΤΟ ΑΠΟΤΕΛΕΣΜΑ.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από geomagas » 30 Σεπ 2013 19:12

korgr έγραψε:
geomagas έγραψε: ...Αλλιώς δεν θα μάθει να χρησιμοποιεί σωστά τα εργαλεία που έχει στη διάθεσή του...
Σημασία έχει να χρησιμοποιεί με τέτοιο τρόπο τα εργαλεία του, ώστε στο τέλος να έχει ΣΩΣΤΟ ΑΠΟΤΕΛΕΣΜΑ.
Τι;;; :o

Καλά, αυτά τα λένε εις τους Παρισίους.... Μάλλον, ούτε εκεί!

Εσύ έχεις όρεξη για κράξιμο κι εγώ δεν έχω. Ό,τι είπαμε.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από korgr » 30 Σεπ 2013 19:20

Εγώ όπως σου έχω ξαναπεί, αυτά που λέω αποδεικνύονται με έργα!
Μπορείς να συνεχίσεις να κάνεις τον καθηγητάκο στο φίλο, αφού ξέρω πως αυτό είναι που γουστάρεις να κάνεις από τότε που έσκασες μύτη εδώ.
Προσωπικά έχω σταματήσει να αναλώνω τον χρόνο μου σε διαδικτυακές "παραδόσεις"!

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από geomagas » 30 Σεπ 2013 19:23

Δε ζήτησα την άποψή σου.

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από Khronos » 30 Σεπ 2013 19:29

@Korgr
Ο καθένας, για τους λόγους, μπορεί να μη θέλει να δείξει τα έργα του.
Παρόλα αυτά, αν θες να έχεις μια εκτίμηση για τις γνώσεις και τη δουλειά του άλλου, με λίγο ψάξιμο όλο και κάτι θα βρεις.

Και όσο για τις διαδικτυακές παραδόσεις, δε νομίζω να είπε κάτι παράλογο ο άνθρωπος.
Χωρίς παρωπίδες και αρνητικότητα κάτι θα "πάρεις" και εσύ από αυτά που λέει.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από korgr » 30 Σεπ 2013 20:37

Συγνώμη που σας χάλασα το class
Συνεχίστε...

ΥΓ Δεν είμαι εγώ που ρωτάω τα how to στα fora. Ως εκ τούτου το αν χρειάζομαι να πάρω και από που, μπορώ να το κρίνω μόνο εγώ!

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Διαχείριση Ιεραρχίας Χρηστών (User Levels)

Δημοσίευση από Khronos » 30 Σεπ 2013 20:47

Και εσύ έχεις ρωτήσει, και εγώ έχω ρωτήσει (και θα ξαναρωτήσω αν δεν έχω την απάντηση σε κάτι) και πολλοί άλλοι έχουν ρωτήσει για να φτάσουν στο επίπεδο να κάνουν λιγότερες ερωτήσεις.

Το θέμα είναι, κατά την άποψη μου (όχι ότι θα σε νοιάζει), ότι από τη μέρα που δημιούργησες το δικό σου framework και cms, το καβάλησες το καλάμι, δυστυχώς...

Απάντηση

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

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

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